我正在使用 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]
如果我可以更清楚,请向我询问更多细节。
答案 0 :(得分:1)
我找到了解决方案here
我所做的是数据源表达式,
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{answers})