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

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

有什么问题吗?

谢谢

最佳答案

首先将子报表 JRXML 保存在 Jasper 服务器中,然后将相同的子报表保存在您要使用的桌面中,然后从调色板中拖动子报表元素。

第 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".

关于java - 如何正确为JasperReport中的子报表提供参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785365/

相关文章:

Java:从 scheduleAtFixedRate 获取 future 的方法

Java Selenium Chromedriver webdriver 尽可能快

java - 如何获取JasperReports中的范围轴刻度间隔?

java - 使用 Java(或不使用)将 .xls 转换为 .pdf

jasper-reports - 如何合并两个已经运行的报告?

java - 执行Java程序appium出错及其他异常

java - 如何从java中的字符中减去一个数字(int)

hadoop - 如何在iReport中连接Hive?

return-value - iReport子报表返回值

java - Jasper子报表InputStream header 不显示图像