struts 2アプリケーションでは、Ireportサブレポート$F(XXX)をデータソース問題として解決する方法について
最近、お客様にサブレポートを作成し、以前のjasper+ireportを採用して開発した結果、サブレポートのデータソースが問題であることがわかり、多くの技術記事を調べたが、new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{addresses})では、struts 2アプリケーションでしかこの問題が発生しないような、私と同じように、このエラーを解決できない人が多いことがわかりました.一日中やった結果、次のような解決策が得られた.
メインレポートにパラメータaddresslistを追加し、パラメータプロパティインタフェースでパラメータタイプ(デフォルトはStringタイプ)を変更しjavaに変更します.lang.Object
メイン・レポートに追加したサブレポート・コントロールのプロパティ・パネルを開き、connection typeプロパティを表示し、Usea datasource expressionオプションを選択します.メイン・レポートに追加されたサブレポート・コントロールのプロパティ・パネルを開き、Data Source Expressionプロパティを表示し、$F{addressList} を入力します.
これにより、サブレポートにはaddressListというデータソースが得られ、全体的に重要なのは
row.put("addressList", new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(slist2));
プライマリ・レポート・データ・ソースに格納する場合は、すでにJRBeanCollectionDataSourceタイプです.
皆さん、何か問題があったらメッセージをください.
setJasperName("deomReport");
List slist1=new ArrayList();
OrderedMap srow = new LinkedMap();
srow.put("zip", "100000");
srow.put("address", " **********");
srow.put("email", "[email protected]");
slist1.add(srow);
List slist2=new ArrayList();
srow = new LinkedMap();
srow.put("zip", "310012");
srow.put("address", " **********");
srow.put("email", "[email protected]");
slist2.add(srow);
OrderedMap row = new LinkedMap();
row.put("name", " ");
row.put("duty", " ");
row.put("age", 33);
row.put("addressList", new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(slist1));
list.add(row);
row = new LinkedMap();
row.put("name", " ");
row.put("duty", " ");
row.put("age", 24);
row.put("addressList", new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(slist2));
list.add(row);
reportParameters.put("SUBREPORT_DIR", "E:\\\\workspace\\demo\\struts2.1.8.1\\WebRoot\\cn\\com\\jandar\\jasper\\demo\\");
reportParameters.put("TITLE", " ");
return "pdf";
<action name="subReport" class="cn.com.jandar.jasper.demo.JasperReportDemo" method="subReport">
<!-- -->
<result name="pdf" type="jasper">
<param name="location">
/cn/com/jandar/jasper/demo/${jasperName}.jasper
</param>
<param name="imageServletUrl">/cn/com/jandar/jasper/demo/images/</param>
<param name="dataSource">list</param>
<param name="format">PDF</param>
<param name="documentName">subReportPDF</param>
<param name="reportParameters">reportParameters</param>
</result>
</action>
メインレポートにパラメータaddresslistを追加し、パラメータプロパティインタフェースでパラメータタイプ(デフォルトはStringタイプ)を変更しjavaに変更します.lang.Object
メイン・レポートに追加したサブレポート・コントロールのプロパティ・パネルを開き、connection typeプロパティを表示し、Usea datasource expressionオプションを選択します.
これにより、サブレポートにはaddressListというデータソースが得られ、全体的に重要なのは
row.put("addressList", new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(slist2));
プライマリ・レポート・データ・ソースに格納する場合は、すでにJRBeanCollectionDataSourceタイプです.
皆さん、何か問題があったらメッセージをください.