使用主报告字段值填充子报告的数据

时间:2013-07-15 18:36:03

标签: java jasper-reports report

我正在使用 iReport 5.0

如果需要显示的对象,我的 subReport 没有收到列表。如何在不使用数据库连接的情况下将主列表中的此列表提供给 subReport

解释情况:
- 我有一个问题列表,每个问题都有一个答案列表和一些正确答案。

所以在 Java

JRBeanCollectionDataSource beanCollection2 = new JRBeanCollectionDataSource(listOfQuestions);
JasperPrint jasperPrint2 = JasperFillManager.fillReport(FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/resources/Report/SurveyGeneralReport.jasper"),
                new HashMap<String,Object>(), beanCollection2) ;

在我的SurveyGeneralReport.jrxml上,我有:

<parameter name="ROOT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["example\\resources\\Report\\"]]></defaultValueExpression>
</parameter>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA[$P{ROOT_DIR} + "SubReport\\"]]></defaultValueExpression>
</parameter>
.
.
.
.
<detail>
        <band height="68" splitType="Stretch">
            <textField>
                <reportElement uuid="bdd12e8b-f8f6-4aea-b2ff-d17255fb6559" x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{question}]]></textFieldExpression>
            </textField>
            <subreport>
                <reportElement uuid="01c7d5a6-c89d-4c56-a14e-18ac5eeb1a71" x="100" y="20" width="415" height="48"/>
                <subreportParameter name="answers">
                    <subreportParameterExpression><![CDATA[$F{answers}]]></subreportParameterExpression>
                </subreportParameter>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "AnswersubReport.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>

在AnswersubReport.jrxml:

<parameter name="answers" class="java.util.Collection"/>
<field name="answerValue" class="java.lang.String"/>
<field name="answerPercentage" class="java.lang.String"/>

那我怎么告诉子报告迭代答案参数呢?

我的例外是:

15:12:21,821 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/admin/round].[Faces Servlet]] Servlet.service() para servlet Faces Servlet lanzó excepción: java.lang.NullPointerException
at net.sf.jasperreports.engine.fill.JRPrintBand.addOffsetElements(JRPrintBand.java:101) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRFillElementContainer.addSubElements(JRFillElementContainer.java:623) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRFillElementContainer.fillElements(JRFillElementContainer.java:600) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:406) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:352) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2023) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:755) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:265) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:836) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:765) [:4.1.3]
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84) [:4.1.3]
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624) [:4.1.3]
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:605) [:4.1.3]

如果我可以更清楚,请向我询问更多细节。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案here

我所做的是数据源表达式,

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{answers})