3

異なる列を含む複数の「サブレポート」を持つレポートをDynamicJasperで作成する必要があります。列のデータは、各行オブジェクトのHashMapに格納されます。DynamicJasperで、列の値がHashMapの特定のキーから取得されるように指定する方法が見つかりませんでした。

単一のレポートを作成すると、JRAbstractBeanDataSourceを拡張して、フィールド名のフォーマット方法に基づいてデータを正しく取得する方法を知っている独自のデータソースを作成できることがわかりました。ただし、addConcatenatedReportを使用して複数のレポートを追加すると、「サブレポート」はカスタムデータソースの代わりにJRBeanCollectionDataSourceを使用します。

私がこれまでに思いついた唯一の解決策は、動的列のフィールド参照にプリロードして使用する「column1value」や「column2value」などの一連のプロパティを持つPOJOを用意することです。私は本当にこれをしたくありません...誰か他のオプションを考えることができますか?足りないものはありますか?

補足:カスタムデータソースタイプをaddConcatenatedReport関数に渡せない理由はありますか?技術的な問題、またはそれは単に必要ではなかったのですか?このようなことは、「動的」レポートの一般的なニーズであるように思われます。

4

1 に答える 1

0

私は昨日同じことを探していました、そして私はあなたの投稿に出くわしました(そして私はそれが最近のものであるのを見ました)。いくつかの検索の後、私はこの問題を克服することができたので、私の発見をあなたと共有するのはいいことだと思いました。

データのPOJOを定義してから、これらすべてのオブジェクトをHashMapに追加したと思います(正しい場合は修正してください)。

私がしたことは、HashMap実装を拡張する新しいオブジェクトを作成することでした。(実際、これを拡張する必要はありません。HashMapオブジェクト自体を使用できます)。そのため、HashMap内にオブジェクトを配置する代わりに、プロパティの値を直接挿入しました。しかし、物事をクリアするためにいくつかのコードブロックを追加しましょう:)

次のPoJOがあるとします。

public class MyPOJO{

  private String name;
  private String value;
  //getters, setters etc..
 }

これらのさまざまなオブジェクトをリストに追加してデータソースとして提供する代わりに、この方法でHashMapを使用してオブジェクトを定義できます。

Map<String,String> myObject1=new HashMap<String,String>();
myObject1.put("name","Name1");
myObject1.put("value","Value1");

Map<String,String> myObject2=new HashMap<String,String>();
myObject2.put("name","Name2");
myObject2.put("value","Value2");

これらのオブジェクトを定義した後、それらをリストに追加し、データソースとして提供できます(JRBeanCollectionDataSource)。したがって、それぞれのキーはHashMap、列で定義されたプロパティ(最初のPOJOのプロパティ)と見なされます。

私の解決策が最善かどうかはわかりませんが、それは私にとってはうまくいきました!

于 2011-06-25T15:09:26.700 に答える