コンテキストから別のBeanインスタンスを取得する正しい方法
-
13-10-2019 - |
質問
次のコードを使用して、コンテキストから管理された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は不必要に複数の豆を作成しません。
所属していません StackOverflow