我在尝试弄清楚如何从java代码中将参数传递给jasperreports中的子子报表时遇到了严重的问题。
我正在讨论的层次结构如下所示:
mainReport
-------------->的报表
--------------------------->的 subSubReport
到目前为止,我尝试将 subSubReport 中所需的参数传递给 mainReport ,并从那里将其传递给 subReport 并从那里有 subSubReport ,但这不起作用。事实上,我确实得到了一个包含 mainReport 和 subReport 内容的pdf文件,但是没有显示 subSubReport 的内容。这就是为什么我猜测我的问题是我不应该将 subSubReport 的参数(更具体地说是SUBREPORT_DIR)传递给 mainReport ,而是传递给子报告,这就是我不知道如何实现的目标。此外,网上关于它的信息很少(且不完整)。
有人可以帮帮我吗?
mainReport代码
<subreport>
<reportElement key="" x="0" y="0" width="554" height="30" isRemoveLineWhenBlank="true" uuid="18ff5513-835d-4910-b39c-6d41252b4679"/>
<subreportParameter name="REPORT_CONNECTION">
<subreportParameterExpression><![CDATA[$P{REPORT_CONNECTION}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="REPORT_DATA_SOURCE">
<subreportParameterExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="SUBREPORT_DIR">
<subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="SUBREPORT1LEVEL1">
<subreportParameterExpression><![CDATA[$P{SUBREPORT1LEVEL1}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT1LEVEL1}]]></subreportExpression>
</subreport>
子报告代码
<subreport>
<reportElement x="50" y="10" width="457" height="40" uuid="4528914e-bb9a-4300-8173-14be2ff2db85"/>
<subreportParameter name="REPORT_CONNECTION">
<subreportParameterExpression><![CDATA[$P{REPORT_CONNECTION}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="REPORT_DATA_SOURCE">
<subreportParameterExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="SUBREPORT_DIR">
<subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="SUBREPORT1LEVEL2">
<subreportParameterExpression><![CDATA[$P{SUBREPORT1LEVEL2}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT1LEVEL2}]]></subreportExpression>
</subreport>
答案 0 :(得分:1)
目前,您使用等于自身的参数设置每个报告级别,而不是将其传递下去。
您需要做的是为每个级别的子报告传递上述级别的参数,例如如果您在顶层有参数,则需要通过关联的子报表参数将其传递到子级别,然后将此级别的参数传递给子子报表,即下一级别的报表
例如,假设我们想要从顶层到底层传递布尔服务器检查参数,参数为&#34; IsOnserver&#34;,&#34; IsOnserverL1&#34;和#34; IsOnserverL2&#34;对于每个相应的报告级别。在主要报告层面,我们会这样:
<parameter name="IsOnServer" class="java.lang.Boolean">
<defaultValueExpression><![CDATA[true]]></defaultValueExpression>
</parameter>
对于下一个级别(子报告),我们将执行以下操作,以使用主报告参数的值填充此内容:
<parameter name="IsOnServerL1" class="java.lang.Boolean">
<defaultValueExpression><![CDATA[$P{IsOnServer}]]></defaultValueExpression>
</parameter>
对于您的第3级和最终级别参数(子子报告),我们将传递子报告参数值:
<parameter name="IsOnServerL2" class="java.lang.Boolean">
<defaultValueExpression><![CDATA[$P{IsOnServerL1}]]</defaultValueExpression>
</parameter>
这将导致主报告参数正确传递到该行。
答案 1 :(得分:0)
在顶层你可以设置并传递初始参数,如下所示:
--set all parameters at top level
<parameter name="SUBREPORT_DIR0" class="java.lang.String">
<defaultValueExpression><![CDATA["level0Dir"]]></defaultValueExpression>
</parameter>
<parameter name="SUBREPORT_DIR1" class="java.lang.String">
<defaultValueExpression><![CDATA["level1Dir"]]></defaultValueExpression>
</parameter>
<parameter name="SUBREPORT_DIR2" class="java.lang.String">
<defaultValueExpression><![CDATA["level2Dir"]]></defaultValueExpression>
</parameter>
--
-- pass parameters to level 1
<subreportParameter name="SUBREPORT_DIR1">
<subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR1}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="SUBREPORT_DIR2">
<subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR2}]]></subreportParameterExpression>
</subreportParameter>
对于第1级,您将设置并传递下一组参数:
--set parameters at level 1
<parameter name="SUBREPORT_DIR1" class="java.lang.String">
<defaultValueExpression><![CDATA[CDATA[$P{SUBREPORT_DIR1}]]></defaultValueExpression>
</parameter>
<parameter name="SUBREPORT_DIR2" class="java.lang.String">
<defaultValueExpression><![CDATA[CDATA[$P{SUBREPORT_DIR2}]]></defaultValueExpression>
</parameter>
--
-- pass parameter to level 2
<subreportParameter name="SUBREPORT_DIR2">
<subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR2}]]></subreportParameterExpression>
</subreportParameter>
对于最终级别,您将设置剩余的传递参数:
-- set parameter at level 2
<parameter name="SUBREPORT_DIR2" class="java.lang.String">
<defaultValueExpression><![CDATA[CDATA[$P{SUBREPORT_DIR2}]]></defaultValueExpression>
</parameter>