質問

次のコードを使用して、コンテキストから管理されたBeanインスタンスを取得しています。

FacesUtils.getManagedBean("beanName");

それはそれを行う正しい方法ですか?複数のユーザーが同じ豆にアクセスした場合、何が起こりますか? Beanインスタンスはどのように管理されていますか?

役に立ちましたか?

解決

以来 FacesUtils 標準のJSF実装の一部ではなく、カバーの下で実際に何をしているのかは不明です。

とにかく、あなたがいるとき すでに 管理された豆の内部では、好ましい方法は、他の豆を管理したプロパティとして注入することです。私はあなたがすでにJSF 2.0を使用していると仮定しますので、JSF 2.0のターゲットを絞った例を次に示します。

@ManagedBean
@SessionScoped
public void OtherBean {}

@ManagedBean
@RequestScoped
public void YourBean {

    @ManagedProperty("#{otherBean}")
    private void OtherBean;

    @PostConstruct
    public void init() {
        otherBean.doSomething(); // OtherBean is now available in any method.
    }

    public void setOtherBean(OtherBean otherBean) {
        this.otherBean = otherBean;
    }

    // Getter is not necessary.
}

しかし、まだJSF 1.xを使用している場合、あなたはそれをする必要があります <managed-property> 入場 faces-config.xml この質問で説明したように: 管理された豆間でデータを渡す.

たまたまCDIを使用している場合 @Named JSFの代わりに @ManagedBean, 、 使用する @Inject それ以外の @ManagedProperty. 。このためには、セッターメソッドは必要ありません。

参照:


あなたの懸念について

複数のユーザーが同じ豆にアクセスした場合、何が起こりますか? Beanインスタンスはどのように管理されていますか?

それらはJSFによって管理されています。豆が見つかった場合、JSFはこの豆を正確に返すだけです。 Beanが見つからない場合、JSFはそれを自動作成して関連する範囲に入れます。 JSFは不必要に複数の豆を作成しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top