我有一个像这样设计的Java DTO对象:
Product
|__ name
|__ List<ClientDTO> clients
我将DTO产品交给Jasper,就像这样:
JRDataSource datasource= new JRBeanArrayDataSource(new Product[]{product});
使用Jaspersoft studio,我可以轻松显示字段名称,但我找不到显示客户列表的方法。
我尝试使用调色板中的可用元素列表,但它需要数据集。好吧,我创建了一个clientDataset。但是,如何将clientDataset与我的客户列表一起提供?
答案 0 :(得分:0)
1)在主报告中,创建DataSet
2)从Palette中,在报告中添加一个List Element
3)打开一个窗口,选择你的DataSet
4)双击List元素。在DataSet菜单中,使用new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{customers})
5)返回DataSet设置以添加Fields
6)双击列表并拖放其中的字段
就是这样!
生成的源代码:
<componentElement>
<reportElement x="110" y="4" width="444" height="20" uuid="118abb83-369d-408b-a3bc-194b978d3fab"/>
<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">
<datasetRun subDataset="customersDataSet" uuid="ce33a9a6-0aaf-4df0-abb7-fc52b0553191">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{customers})]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="20" width="444">
<textField>
<reportElement x="0" y="0" width="30" height="20" uuid="a65f7a8f-1530-4657-ac3d-a053ea18cb14"/>
<textFieldExpression><![CDATA[$F{civilite}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="30" y="0" width="120" height="20" uuid="5f85470a-8c28-4550-aac8-e414ff64fe90"/>
<textFieldExpression><![CDATA[$F{firstName}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="150" y="0" width="140" height="20" uuid="6a8c4e04-4278-4595-845f-67be590d9210"/>
<textFieldExpression><![CDATA[$F{lastName}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
<subDataset name="customersDataSet" whenResourceMissingType="Empty" uuid="10331e47-e08a-42d9-8733-bcf103ea7aed">
<queryString>
<![CDATA[]]>
</queryString>
<field name="civilite" class="java.lang.String"/>
<field name="firstName" class="java.lang.String"/>
<field name="lastName" class="java.lang.String"/>
</subDataset>