2

次のように @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 パッケージからのものであることを確認しました

4

1 に答える 1