Jasper reports <;打印时按下>;不适用于jasper中json对象数组的条件显示

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

我是jasper的初学者,正在编写一个报告,在这个报告中,我只需要在数据存在时显示表的标题。我的jrxml中目前有以下代码片段:

<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>