Jasper reports <;打印时按下>;不适用于jasper中json对象数组的条件显示
我是jasper的初学者,正在编写一个报告,在这个报告中,我只需要在数据存在时显示表的标题。我的jrxml中目前有以下代码片段:Jasper reports <;打印时按下>;不适用于jasper中json对象数组的条件显示,jasper-reports,Jasper Reports,我是jasper的初学者,正在编写一个报告,在这个报告中,我只需要在数据存在时显示表的标题。我的jrxml中目前有以下代码片段: <frame> <reportElement stretchType="ContainerHeight" x="240" y="37" width="110" height="52" uuid="some-uuid"> <property name="com.jaspersoft.studio.unit.width
<frame>
<reportElement stretchType="ContainerHeight" x="240" y="37" width="110" height="52" uuid="some-uuid">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<staticText>
<reportElement positionType="Float" x="0" y="0" width="110" height="16" uuid="some-uuid">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[EMPLOYEES]]></text>
</staticText>
<componentElement>
<reportElement positionType="Float" x="0" y="16" width="110" height="16" isRemoveLineWhenBlank="true" uuid="some-uuid">
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
</reportElement>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="employeesDataSet" uuid="some-uuid">
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("employees")]]></dataSourceExpression>
</datasetRun>
<jr:column width="110" uuid="some-uuid">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column1"/>
<jr:detailCell height="16">
<textField isStretchWithOverflow="true">
<reportElement style="paragraph" stretchType="ElementGroupHeight" x="0" y="0" width="110" height="16" isRemoveLineWhenBlank="true" uuid="some-uuid"/>
<textElement markup="html">
<font size="12"/>
</textElement>
<textFieldExpression><![CDATA["<B>" +($F{type} != null ? $F{type} : "") + "</b> " + ($F{result} != null ? $F{result} : "") + ", " + ($F{value} != null ? $F{value} : "") + " " + ($F{unit} != null ? $F{unit} : "")]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
</frame>
如何仅在数据存在时显示静态标题EMPLOYEES
,而在JSON中没有数据时不显示任何内容
我尝试添加
,但没有成功:
<printWhenExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("employees") != null]]></printWhenExpression>
我找到了解决方案并将其发布在这里,以便其他面临类似问题的人可以参考 要检查json数组是否有更多元素,请使用next()方法。这句话对我有用:
<printWhenExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("employees").next()]]></printWhenExpression>
<printWhenExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("employees").next()]]></printWhenExpression>