2

我正在使用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"/>

那么我如何告诉 subreport 迭代 answers 参数?

我的例外是:

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]

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

4

1 回答 1

1

我在这里找到了解决方案

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

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{answers})
于 2013-07-15T19:35:12.700 回答