2012-01-27 35 views
6

私はiReportが新しく、PDFレポートを作成する必要があります。iReport(JasperReports)のデータソースとして1つのオブジェクト(Java Bean)

JavaBean DataSourceでは、JavaBeansの配列(またはコレクション)をラップしますが、オブジェクト(JavaBeanのインスタンスは1つのみ)を渡す必要があります。つまり、Java Beanのプロパティをレポートに表示する必要があります。

どうすればいいですか?私は少し混乱している、私は1つの項目だけの配列を渡す必要がありますか?

+0

サンプル[here](http://jasperreports.sourceforge.net/sample.reference/datasource/index.html#javabeandatasources) –

答えて

14

あなたはJRBeanArrayDataSourceまたはJRBeanCollectionDataSourceを使用してレポートにあなたのBeanを渡すこともできますし、パラメータマップを使用することができます。

JasperPrint reportPrint = JasperFillManager.fillReport(
     this.getClass().getClassLoader().getResourceAsStream("/report.jasper"), 
      new HashMap<String,Object>(), 
       new JRBeanArrayDataSource(new YourBean[]{yourBean})); 

または

Map<String,Object> params = new HashMap<String,Object>(); 
params.put("yourBean", yourBean); 

JasperPrint reportPrint = JasperFillManager.fillReport(
     this.getClass().getClassLoader().getResourceAsStream("/report.jasper"), 
       params, new JREmptyDataSource()); 
+0

が見つかります。ありがとうございました。 – ilazgo

+0

その後、Beanの特定のプロパティにどのようにアクセスするのですか? yourbeanは私が理解できるパラメータになります。しかし、それはint型のdocumentTypesを持っていると言うことができます。私はそれをレポートに表示したいのです。私はフィールド/パラメータを介してレポートでそれを得るためにベールではないのですか? –

+0

@manocha_akレポートで '$ P {yourBean} .getDocumentTypes()'や '$ P {yourBean} .getDocumentTypes()[0]'を呼び出すことができます。 'yourBean'パラメータは、' iReport'に 'YourBean'パラメータクラスとして持つ必要があります。 – dcernahoschi

1

定義済みのJasperレポート・クラスを使用する場合は、「はい」を選択します。 JRAbstractBeanDataSourceのデフォルトの実装は、配列やコレクションを扱うことに限定されています。つまり、1つの要素配列または1つの要素コレクションを作成できます。

代替はnext()moveFirst()メソッドをスタブJRAbstractBeanDataSourceの独自のバージョンを実装することであろうが、必要な動作を取得するためにストレートフォワードな方法がありますときには何をする仕事の愚かな量のように見えるん。

0

一つだけ豆を持っている場合でも、収集データソースを使用することができます。この場合、コレクションにはオブジェクトが1つしかありません。正しいグループ化を使用してレポートデザインを作成すると、後でこのレポートを使用して、それぞれのプロパティを持つ複数のクラスを表示できます。

関連する問題