与参数SUBREPORT_DIR分配的java.lang.Integer值不兼容

时间:2012-06-06 11:14:59

标签: jasper-reports

让我描述一种情况:我有一个报告A和子报告B和C. A使用B和B使用C. A中的SUBREPORT_DIR的默认值是$P{CUSTOM_SUBREPORT_DIR}。在A.jrxml中,我看到:

<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA[$P{CUSTOM_SUBREPORT_DIR}]]></defaultValueExpression>
</parameter>
<parameter name="CUSTOM_SUBREPORT_DIR" class="java.lang.String">
    <defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>

我还需要B中SUBREPORT_DIR的正确值,所以我使用iReport(子报表属性/参数)传递它,所以在A.jrxml我有:

<subreportParameter name="SUBREPORT_DIR">
    <subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR}]]></subreportParameterExpression>
</subreportParameter>

当我尝试生成报告A时,我得到net.sf.jasperreports.engine.JRException: Incompatible java.lang.Integer value assigned to parameter SUBREPORT_DIR in the B dataset.

我确定$P{SUBREPORT_DIR}不是整数,B子报表中的SUBREPORT_DIR参数类型是String。我使用iReport 4.0.2创建的所有报告。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法(我这样做并且有效):

在报告A中定义参数:

<parameter name="SUBREPORT_B_DIR" class="java.lang.String" isForPrompting="false" />
<parameter name="SUBREPORT_C_DIR" class="java.lang.String" isForPrompting="false" />

在报告A中定义子报告B.这里我使用DataSource从参数中获取报告B.另外,我使用子报表C目录向子报表B发送参数,并使用DataSource向报表C发送另一个参数。

<subreport>
    <reportElement x="0" y="16" width="583" height="10" />
    <subreportParameter name="SUBREPORT_C_DIR">
         <subreportParameterExpression><![CDATA[$P{SUBREPORT_C_DIR}]]></subreportParameterExpression>
    </subreportParameter>
    <subreportParameter name="SubReportCDataSource">
         <subreportParameterExpression><![CDATA[$P{SubReportCDataSource}]]></subreportParameterExpression>
    </subreportParameter>
    <dataSourceExpression><![CDATA[$P{SubReportBDataSource}]]></dataSourceExpression>
    <subreportExpression><![CDATA[$P{SUBREPORT_B_DIR} + "B.jasper"]]></subreportExpression>
</subreport>

最后,在子报告B中,定义子报告C:

<subreport>
        <reportElement x="0" y="16" width="583" height="10" />
        <dataSourceExpression><![CDATA[$P{SubReportCDataSource}]]></dataSourceExpression>
        <subreportExpression><![CDATA[$P{SUBREPORT_C_DIR} + "C.jasper"]]></subreportExpression>
    </subreport>