1

1 つの JSF ページに 2 つの異なる Bean (Spring) を使用したい。JobEditDataBeanすべてのメソッドを 1 つの Bean に書き込むのは好きではないので、 と のように2 つの Bean に分けてみましたJobEditActionBean。JobEdiDataBean をデータ オブジェクトの「コンテナ」として使用し、アクション (保存、更新など) をアクション Bean に移動したいと考えています。私が今までにしたこと(そしてうまくいくように見えますが、間違っていると感じること)は次のとおりです:

public class JobEditDataBean{
    @Autowired
    JobEditActionBean actionBean;
    // some objects...
    @PostConstruct
    public void init() {
       actionBean.setJobEditDataBean(this);
       // do something ... 
    }
}

public class JobEditActionBean{
    JobEditDataBean dataBean;
    // some objects...
}

これをより良く、より良く行うためのヒントやヒントはありますか?

4

1 に答える 1

1

実際、各ページに 1 つの Bean を配置する必要はありません。#{someMB}XHTML で次のような式が見つかると、JSF はその名前の Bean を見つけて、必要に応じて新しいインスタンスを作成するため、任意のページに必要な数の Bean を使用できます。

ある Bean を別の Bean に注入する必要がある場合は、@Autowired既に使用してください。

@Component
@Scope("request")
public class JobEditActionBean {
    @Autowired
    private JobEditDataBean dataBean;
    @PostConstruct
    public void init() {
        // dataBean.youCanUseDataBeanMethodsHereAlready()
    }
}

両方の Bean が Spring コンテナー内にあることを確認し (アノテーションを付けて@Component実行します)、それぞれに適切なスコープを選択するだけです。注入する Bean のスコープに注意してください。通常は、より広いスコープの Bean を同じまたはより制限されたスコープの Bean に注入することだけが理にかなっているからです。

そうは言っても、適切なスコープの選択について次のスレッドを読むことをお勧めします。

適切な Bean スコープを選択するには?

もう 1 つ: これは、JSF Bean が実際に Spring コンテナーによって管理されている場合にのみ有効です (これは、 を使用した後の私の仮定でした@Autowired)。JSF コンテナーに Bean を管理させる場合 (たとえば@ManagedBeanwith@RequestScopedまたはを使用)、それらを注入する方法はアノテーションを使用することです。@ViewScoped@ManagedProperty

    ...
    @ManagedProperty("#{jobEditDataBean}")
    private JobEditDataBean dataBean;
于 2012-09-20T09:10:44.570 に答える