我有一个包含子报告的报告模板;
在主报告中我也有一些参数应该在子报告中可用
主报告参数定义如下:
<parameter name="PID" class="java.lang.Integer"/>
在子报告中,我使用相同的名称定义了相同的参数:
<parameter name="PID" class="java.lang.Integer"/>
我提供了子报告的主报告参数,如下所示:\
<subreport>
<reportElement x="0" y="0" width="555" height="50"/>
<parametersMapExpression>
new HashMap($P{REPORT_PARAMETERS_MAP})
</parametersMapExpression>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression class="java.lang.String"><![CDATA["subRPT.jasper"]]></subreportExpression>
</subreport>
但这会抛出这个:
SEVERE: null
net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Incompatible java.lang.Integer value assigned to parameter PID in the subRPT dataset.
at net.sf.jasperreports.engine.fill.JRFillSubreport.prepare(JRFillSubreport.java:711)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:329)
at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:419)
at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:378)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2035)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:760)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:270)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
at biorec.control.reporting$1.doInBackground(reporting.java:177)
有什么问题?
由于
答案 0 :(得分:1)
首先在Jasper服务器中保存子报表JRXML,然后在要使用的桌面中保存相同的子报表,然后从调色板中拖动子报表元素。
第1步: -
Select "Use an existing report" option and select the same subreport
下
it will ask for database, if you are using the same database
然后单击“下一步”按钮
then it will ask for parameters , select all the parameter expression
和下一个
choose "Store the directory name in a parameter" option
然后结束。
现在选择子报告,然后转到属性选项卡,它将不会在Ireport中运行并选择“子报告表达式”,您必须在此处提供子报告的路径,该路径位于Jasperserver中
format "repo:/path_of_subreport in jasper".
答案 1 :(得分:1)
<subreportParameter name="PID">
<subreportParameterExpression>
<![CDATA[$P{PID}]]>
</subreportParameterExpression>
</subreportParameter>
答案 2 :(得分:0)
谢谢大家,
但问题出在我的JasperReport库和iReport之间的版本错过匹配
使用相同版本修复了问题。