【问题标题】:How to fill a list with json array of strings in jasper reports?如何在 jasper 报告中用 json 字符串数组填充列表?
【发布时间】:2021-07-20 22:59:28
【问题描述】:

假设我们有这个 JSON:

{
    "header" : "some header",
    "strings": [
                    "foo",
                    "bar",
                    "baz"
                ]
}

我们希望将它显示在 jasper 报告中 - 标题作为文本字段,数组显示在列表中。

这是报表,它可以访问数组,但不显示它的所有元素 - 只显示第一个元素。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="sample" pageWidth="595" pageHeight="100" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isIgnorePagination="true" uuid="6c570f43-054a-44a9-a9b1-ba4cf2cdcf86">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="json-sample"/>
    <subDataset name="ListDataSet" uuid="fb812d2a-cb63-473c-b7d3-149977476dd0">
        <field name="val" class="java.lang.String">
            <property name="net.sf.jasperreports.jsonql.field.expression" value="strings.*"/>
        </field>
    </subDataset>
    <queryString language="jsonql">
        <![CDATA[]]>
    </queryString>
    <field name="header" class="java.lang.String">
        <property name="net.sf.jasperreports.jsonql.field.expression" value="header"/>
        <fieldDescription><![CDATA[header]]></fieldDescription>
    </field>
    <field name="strings" class="java.lang.String">
        <property name="net.sf.jasperreports.jsonql.field.expression" value="strings"/>
        <fieldDescription><![CDATA[strings]]></fieldDescription>
    </field>
    <background>
        <band splitType="Stretch"/>
    </background>
    <pageHeader>
        <band height="30" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="100" height="30" uuid="d98a55eb-ebbd-4cdd-8fa2-ae052b124aaa"/>
                <textFieldExpression><![CDATA[$F{header}]]></textFieldExpression>
            </textField>
        </band>
    </pageHeader>
    <detail>
        <band height="30" splitType="Stretch">
            <componentElement>
                <reportElement x="0" y="0" width="450" height="30" uuid="887dc258-2eac-4492-ae69-f9b2ffd1faee">
                    <property name="com.jaspersoft.studio.unit.CONTENTS.width" value="px"/>
                </reportElement>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Horizontal">
                    <datasetRun subDataset="ListDataSet" uuid="1316cfd7-fe59-440f-a155-501914c00056">
                        <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)($P{REPORT_DATA_SOURCE})).subDataSource()]]></dataSourceExpression>
                    </datasetRun>
                    <jr:listContents height="30" width="100">
                        <textField>
                            <reportElement x="0" y="0" width="90" height="30" uuid="4ee2d6b3-c681-433f-a170-4bb31697de58"/>
                            <textFieldExpression><![CDATA[$F{val}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
        </band>
    </detail>
</jasperReport>

结果如下所示:

报告有什么问题?

【问题讨论】:

    标签: json jasper-reports


    【解决方案1】:

    您的字段可能会更新一点:

    • $F{标题} => java.lang.String
    • $F{strings} => java.util.List - 这使得可以将此字段用作子组件的数据源。

    那么当你传入Datasource的时候,传入列表就行了:

    • new JRBeanCollectionDatasource($F{strings})
    • new JRBeanArrayDatasource($F{strings})

    为你列出数据集我只想:

    • $F{_THIS} => java.lang.String - 我不确定val 是否有效,但我确信_THIS 有效(5.2 和 6.3)

    如果您需要,我会尝试发布 JRXML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多