次のように @ApplicationScoped にグローバル データのリストを持つ Bean があります。
@ApplicationScoped
@ManagedBean
public class GlobalData
{
private List data = new ArrayList();
//getter and setterss goes here..
public void addSomeData(Object item) { data.add(item); }
}
また、次のように @ManagedProperty を介して GlobalData を参照する @ViewScoped Bean があります。
@ManagedBean
@ViewScoped
public class SomePageController
{
@ManagedProperty(value="#{globalData}"
private GlobalData theGlobalData;
//also public getter and setter of theGlobalData
}
面白いことに、SomePageController で、次のように GlobalData のリストに項目を追加したい場合があります。
public void someUIAction()
{
SomeItem item = bussinesProcess();
theGlobalData.addSomeData( item );
}
someUIAction が呼び出されるたびに、theGlobalData は空のデータを持つまったく新しいインスタンスを指すためです!!!! 次のようなログイン情報を追加したため、これを確認できます。
public void someUIAction()
{
SomeItem item = bussinesProcess();
theGlobalData.addSomeData( item );
System.out.println(theGlobalData.toString());
}
そして、私は次の出力を得ました:
com.myproyect.beans.GlobalData@3c76da81
com.myproyect.beans.GlobalData@19c1818a
com.myproyect.beans.GlobalData@9a7jp79c
......
すべてのリクエストで新しいインスタンス、私はグーグルで検索しましたが、私が得ることができる唯一の情報は、同様の問題を抱えているこの男に関するものです.
** 追加情報**: Apache MyFaces を含む TomEE 1.5.2 Web プロファイルで開発しています。また、すべての注釈が javax.faces.bean パッケージからのものであることを確認しました