Jasperreports でサブレポートを出力するときの jrxml を準備するのに、いつもデータを渡すコレクションのラップを
テンプレートで設定を書き込む方法を忘れて、後からどうやるんだっけと悩んでしまうので、手順メモです。
Jaspersoft Studio 上でテンプレート jrxml の先頭を Outline タブで選択します。
選択したら、プロパティで、import のところを入力します。
すると以下のようにテンプレート jrxml が Javaとしてインポートするクラス、パッケージ指定を設定するものが
出てきます。
[Add Class] をクリックして、コレクション渡しの目的の net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
を選択します。
設定します。
この設定をしておくことで、sabreport の設定は、以下のように、JRBeanCollectionDataSource を 簡潔に new 演算子指定できます。
この import 設定をしなければ、new JRBeanCollectionDataSource( ) の記述はコンパイルエラーになり、
import 設定をしなければ、 new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource( ) と
書かなければなりません。
Javaのコードは気持ち悪いダサいコードですが、、
public class FareDatasource implements Serializable{ public Collection<FareItem> farereports; public FareDatasource(Collection<FareItem> farereports){ this.farereports = farereports; } public Collection<FareItem> getFarereports(){ return farereports; } } Collection<FareDatasource> farereports = new ArrayList<>(); FareDatasource datasource = new FareDatasource(list); farereports.add(datasource); JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(farereports); JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, parameters, dataSource); inputStream.close();
こんな風になります。