让我描述一种情况:我有一个报告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创建的所有报告。
答案 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>