当前位置: 首页 > 知识库问答 >
问题:

不适用于jasper中json对象数组的条件显示

洪黎昕
2023-03-14

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

将数据写入报表的JSON如下所示:

 "employees": [
    {
      "type": "HR",
      "result": "1",
      "value": "Positive"
},
    {
      "type": "MD",
      "result": "3",
      "value": "Positive"
}
]

如何仅在存在数据时显示静态标头EMPLOYEES,而在JSON中没有数据时不显示任何内容?

我已尝试添加<代码>

<printWhenExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("employees") != null]]></printWhenExpression>

共有1个答案

融泓
2023-03-14

我已经找到了解决方案,并将其发布在这里,以便其他面临类似问题的人可以参考。

要检查json数组是否有更多元素,请使用next()方法。这句话对我有用:

<printWhenExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("employees").next()]]></printWhenExpression>
 类似资料:
  • 其他条件,抱歉,当购物车是空的时候,购物车中没有物品不打印

  • 问题内容: 只是试图在视图中显示我通过ajax从控制器获取的数组,但它显示的是[object Object],[object Object]而不是array。请在下面检查我的js文件: 问题答案: 使用转换到。 试试这个: 我认为,这对您有帮助-

  • 六羟甲基三聚氰胺六甲醚。。在某些情况下,我有一个对象需要在hazelcast实例上执行操作。所以我实现了HazelcastInstanceAware接口,但这似乎不适用于嵌套类。。。 以下核心输出"null"到控制台: 公共类NullError实现可序列化,HazelcastInstanceAware{私有瞬态HazelcastInstance instance1;私有瞬态HazelcastIns

  • 我想知道如何为不同对象的数组指定JSON模式。这个线程给了我一半的答案,但当我有每种类型的对象的多个实例时,它就失败了。 下面是一个基于这里给出的示例的示例XML,但是重复了“product”对象:- 下面的模式将只在每种类型都有单个实例时(例如,如果“product”只出现一次)验证上面的XML。 为了增加娱乐性,我不能使用像“anyof”这样的关键字,因为我要将这个模式嵌入到一个Swagger

  • 问题内容: 我需要用车把一个json对象数组模板化:(通过chrome控制台)[object,object,object,object]其中每个对象都由以下属性组成:名称,姓氏,ecc。 我知道不可能将对象数组放在车把中,但是我们必须创建具有数组所有对象的all属性的唯一对象。谁能建议我一个函数来创建它 问题答案: 您可以在调用模板时将数组设置为包装对象的属性。 例如,以作为持有财产 并且您的模板