0

ゲッターで CDI インジェクション Bean を使用するクラスがいくつかあります。

class MyBean() {
    @Inject
    private TranslationBean translationBean;

    private String chosenValue;

    public void setChosenValue(String c) { chosenValue = c;}
    public String getChosenValue() {
        return translationBean.getTranslatedValue(chosenValue);
    }
}

基礎となるchosenValueものはデータベースからロードされ、データベースに永続化されます。

今、私は JasperReport で生成された PDF を のような Bean で作成したいと考えていますDataSource。電話する:

JasperFillManager.fillReport("myFile.jasper", new HashMap<String, Object>(), new JRBeanCollectionDataSource(Arrays.asList(myBean));

明らかに、Weld からのエラー メッセージは、最終的にアクティブなコンテキストがないというものになります。

私は今、2つの可能性を見ています:

  1. MyBean必要なすべてのフィールドに実際のデータが入力され、CDI 依存関係が不要な JasperReports用のラッピング クラスを作成します。問題は次のとおりです。多くのボイラープレートと繰り返しコードを含む大量のコーディング。
  2. JasperFillManager現在のアクティブな CDI コンテキスト内で実行されるように、何らかの方法で への呼び出しの周りにコンテキストをラップすることができます。

2番目のオプションは可能でしょうか? 提案された方法よりも優れた方法はありますか?

4

1 に答える 1

0

すべてのJasperStuffをラップすることが可能であれば、おそらく新しいスコープの作成を検討しているでしょう。https://github.com/seam/reportsにあるSeamReportsのものを見てください。これは、何らかの助けやインスピレーションになる可能性があります。

于 2013-01-26T15:12:35.190 に答える