如何正确地为JasperReport中的子报表提供参数

时间:2012-12-09 06:48:15

标签: java jasper-reports subreport

我有一个包含子报告的报告模板;
在主报告中我也有一些参数应该在子报告中可用 主报告参数定义如下:

<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)

有什么问题?

由于

3 个答案:

答案 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之间的版本错过匹配 使用相同版本修复了问题。