我正在使用 Jasper Report 和 Servlet。
Bean 团队看起来像
private int tid;
private String title;
private List<Member> members;
//getter and setter
成员bean看起来像
private int id;
private String name;
//getter and setter
在报告 Servlet 中,
List<Team> teams = service.getTeams();
Map parameters = new HashMap();
JasperPrint jasperPrint = null;
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(teams));
当在新的 JRBeanCollectionDataSource(teams) 中添加团队时,如何在 Jasper 报告中显示它?因为List中包含List。
我需要子报告来解决这个问题吗?
或者我可以在没有子报告的情况下解决这个问题吗?
有两种方法可以实现此目的:
带子报告
您确实可以通过使用子报表来解决这个问题。为此,您需要添加一个子报表并将其数据源表达式设置为new JRBeanCollectionDataSource($F{members})
。你的领域Member
然后 bean 将可用作子报告中的字段(例如$F{name}
).
带有列表组件
您还可以使用列表组件在没有子报表的情况下解决此问题。这可以从 iReport 的调色板中获得,或者您可以复制下面的示例。需要将其添加到报告的详细信息区域中。
列表组件有一个数据源表达式,就像报表一样,您应该将其设置为new JRBeanCollectionDataSource($F{members})
,并且有一个listContents
行为类似于子报表的详细信息区域的元素;对于数据源中的每个成员,其中的元素都会重复一次。
列表组件需要在您的报表中添加一个子数据集,但这将由 iReport 自动添加,或者您可以轻松添加一个空数据集:<subDataset name="dataset1"/>
.
<componentElement>
<reportElement x="0" y="0" width="555" height="20"/>
<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="dataset1">
<dataSourceExpression><![CDATA[new JRBeanCollectionDataSource($F{members})]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="20" width="555">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
有关列表组件的更多信息,请参见此处:http://jasperreports.sourceforge.net/sample.reference/list/index.html http://jasperreports.sourceforge.net/sample.reference/list/index.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)