![](/img/trans.png)
[英]having trouble with two datasets using javabean as datasource in jasper report
[英]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.