在Jasper报告中的Java Bean列表中传递列表

时间:2015-04-08 10:33:47

标签: servlets jasper-reports javabeans

我正在使用带有Servlet的Jasper Report。 Team 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(团队)中添加团队时,如何在Jasper报告中显示它?因为它包含List中的List。

我是否需要子报告来解决此问题?

或者我可以在没有子报告的情况下解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

有两种方法可以实现这一目标:

使用子报告

您确实可以使用子报表解决此问题。为此,您需要添加子报表并将其数据源表达式设置为new JRBeanCollectionDataSource($F{members})。然后,您的Member bean的字段将作为子报表中的字段提供(例如$F{name})。

使用列表组件

您也可以使用列表组件在没有子报表的情况下解决此问题。这可以从iReport的调色板中获得,或者您可以复制下面的示例。这需要添加到报告的详细信息区域。

list组件有一个数据源表达式,就像一个报告,你应该设置为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