如何将参数传递给java代码中的子子报告JasperReports

时间:2017-02-10 10:38:52

标签: java jasper-reports subreport

我在尝试弄清楚如何从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>

2 个答案:

答案 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>