2011-06-23 6 views
3

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

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

これまでに私が思いついた唯一の解決策は、 "column1value"や "column2value"のようなプロパティを持つPOJOを用意して、動的列のフィールド参照に事前ロードして使用することです。私本当にこれをしたくない...誰も他のオプションを考えることができますか?私が紛失しているものは何ですか?

サイドノート:カスタムデータソースタイプをaddConcatenatedReport関数に渡せない理由は何ですか?技術的な問題、またはそれだけで必要とされていない?このように、「動的な」レポートが一般的に必要になると思われます。

答えて

1

私は昨日同じことを探していましたが、私はあなたの投稿を見つけました(そして、最近のことでした)。いくつかの検索の後、私はこの問題を克服することができたので、私はあなたに私の発見を分かち合うことがうれしいと思った。

データ用のPOJOを定義し、これらのオブジェクトをすべてHashMapに追加したとします。

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

では、次のPOJO

public class MyPOJO{ 

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

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

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この方法。したがって、各HashMapのキーは、列(初期POJOのプロパティ)で定義されたプロパティと見なされます。

私の解決策が最善であるかどうかはわかりませんが、それは私のために働いていました!

関連する問題