簡體   English   中英

JavaBean DataSource不會傳遞給子子報告

[英]JavaBean DataSource doesn't get passed to the sub-sub-report

我無法找到如何正確地將JavaBean DS傳遞給子子報告。 我有以下Java代碼:

     JRDataSource javaBeansKapitelDS = new JRBeanCollectionDataSource(BeanFactory.generateKapitelCollection());
     jasperReport = JasperCompileManager.compileReport("JRXML/Subreports.jrxml");
     jasperUnterkapitelReport = JasperCompileManager.compileReport("JRXML/Subreports_subreport1.jrxml");
     jasperEntryReport = JasperCompileManager.compileReport("JRXML/Subreports_subreport1_subreport1.jrxml");

     params.put("SUB_DATASOURCE", BeanFactory.generateUnterKapitelCollection());
     params.put("SUB_SUB_DATASOURCE", BeanFactory.generateEntryCollection());

     jasperPrint = JasperFillManager.fillReport(jasperReport, params, javaBeansKapitelDS);
     JasperExportManager.exportReportToPdfFile(jasperPrint, "output/TestJAVABeansDS.pdf");

在主報告中,我有一個報告,它有一個子報告,而子報告又有自己的子報告。 在主報告中,我將子報表的數據源設置為DataSource Expression new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_DATASOURCE})並且工作正常!

在子報表中,我嘗試對subsubreport執行相同的操作( new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_SUB_DATASOURCE}) )但我無法將SUB_SUB_DATASOURCE參數從主報表傳遞到子報表中為了在那里使用它。 如果我在主報表中定義子報表的參數:

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

我得到一個例外

Caused by: java.lang.NoSuchMethodException: Unknown property '' on class 'class jasperreports.datasource.Entry'

...

Fill 1: exception

net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean :

... 

我正在使用最新的JasperReports庫5.5.1

所以我的問題是:我如何將子報告傳遞給子報告以便在子報告中使用它?

解決方案非常簡單。 您已經將參數傳遞給子報表,您只需要在子報表中再次執行相同的操作即可將其傳遞給子報表。 讓我們調用您的報告A,B和C. A是主報告,其中包含B,其中包含C.

報告A包含以下參數(您通過調用params.put從Java設置):

<parameter name="SUB_DATASOURCE" class="java.util.Collection" />
<parameter name="SUB_SUB_DATASOURCE" class="java.util.Collection" />

報告A還包含第一subreport 報告組件:

<subreport>
    ...
    <subreportParameter name="SUB_DATASOURCE">
        <subreportParameterExpression><![CDATA[$P{SUB_DATASOURCE}]]></subreportParameterExpression>
    </subreportParameter>
    <subreportParameter name="SUB_SUB_DATASOURCE">
        <subreportParameterExpression><![CDATA[$P{SUB_SUB_DATASOURCE}]]></subreportParameterExpression>
    </subreportParameter>
    <dataSourceExpression><![CDATA new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_DATASOURCE})]]></dataSourceExpression>
    ...
</subreport>

報告B包含從報告A傳遞的相同參數:

<parameter name="SUB_DATASOURCE" class="java.util.Collection" />
<parameter name="SUB_SUB_DATASOURCE" class="java.util.Collection" />

您現在需要再次將SUB_SUB_DATASOURCE作為subreportParameter傳遞給報表C. 因此報告B將包含第二個子報告組件,如下所示:

<subreport>
    ...
    <subreportParameter name="SUB_SUB_DATASOURCE">
        <subreportParameterExpression><![CDATA[$P{SUB_SUB_DATASOURCE}]]></subreportParameterExpression>
    </subreportParameter>
    <dataSourceExpression><![CDATA new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_SUB_DATASOURCE})]]></dataSourceExpression>
    ...
</subreport>

如果要在報表C中使用該參數,則可以按如下方式包含該參數:

<parameter name="SUB_SUB_DATASOURCE" class="java.util.Collection" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM