struts 2アプリケーションでは、Ireportサブレポート$F(XXX)をデータソース問題として解決する方法について

3207 ワード

最近、お客様にサブレポートを作成し、以前のjasper+ireportを採用して開発した結果、サブレポートのデータソースが問題であることがわかり、多くの技術記事を調べたが、new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{addresses})では、struts 2アプリケーションでしかこの問題が発生しないような、私と同じように、このエラーを解決できない人が多いことがわかりました.一日中やった結果、次のような解決策が得られた.

	 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オプションを選択します.
  • メイン・レポートに追加されたサブレポート・コントロールのプロパティ・パネルを開き、Data Source Expressionプロパティを表示し、$F{addressList}
  • を入力します.
    これにより、サブレポートにはaddressListというデータソースが得られ、全体的に重要なのは
    row.put("addressList",  new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(slist2));
    プライマリ・レポート・データ・ソースに格納する場合は、すでにJRBeanCollectionDataSourceタイプです.
    皆さん、何か問題があったらメッセージをください.