2012-01-10 10 views
1

に私は私のプロジェクトでは、以下のような問題があります。私たちは、次のように構成された2つの管理対象Beanを持ってJSF SessionScoped managedBeanがViewScoped managedBeanと連動

を:

@ManagedBean 
@SessionScoped 
public class SessionBean { 
    private PersonnelFile personnelFile; // + getters/setters 
} 

@ManagedBean 
@ViewScoped 
public class ViewBean { 
    @ManagedProperty("#{sessionBean}") 
    private SessionBean sessionBean; 

    public void selectPersonnel() { 
     sessionBean.getPersonnelFile().setPerson(new Person()); 
    } 
} 

これは、すべてのコードではなく、それはあなたのsitatutionの一般的なアイデアを与える:セッションオブジェクト

  • ヴィを保持している

    • SessionScoped豆ビュー関連のオブジェクトとSessionScopedのBeanへの参照を保持しているwScoped豆

    問題が今ある:私は私のビューにアクセス

    • は、私が同じビューにいくつかのポストバックを作ります毎回ビューに戻ってきます..これまでのところとても良い
    • ある時点で、SessionScoped Beanのセッションオブジェクトをビューからの情報で設定しました。私は自分のビューを残しました...これまでのところとても良い
    • 今、私がthに戻ると(期待どおり)新しいViewScoped Beanインスタンスを作成し、SessionScoped Beanを戻します(ManagedPropertyアノテーションのため)
    • これをデバッグすると、SessionScoped Beanへの参照が同じであることがわかりますそれは私ドンので、しかし、私は以前にSessionScoped豆に設定されたオブジェクトが、彼は私がSessionScoped豆でこのオブジェクトをリセットすることはありません、そのオブジェクト
    • についてのセッション情報を「失われた」という意味、nullになってきた同じオブジェクト
    • ですそれが間違っていた可能性がある場所を参照してください...

    詳しい説明が必要な場合やあなたは私にこの質問をより良く言いたい、私に知らせるか、編集ボタンを使ってもらいたいです!

  • +1

    * *「私はSessionScoped Bean内のこのオブジェクトをリセットすることはありません」...

    だから、私の問題は固定されているが、解決策が理想的である場合、私はよく分かりません。確かにプロパティを変更したコード内に何かがあったに違いない。魔法はありません。これまでの情報では、潜在的な原因を指摘することはできません。デバッガの 'private Person person;'行に変数watch breakpointを置く必要があります。次に、変更しようとしているスタックを調べることができます。 – BalusC

    +0

    私はこの問題を発見したかもしれないと思います。私たちのweb.xmlファイルでは、次の設定を使用していた。 '<コンテキスト-param>の ​​javax.faces.STATE_SAVING_METHOD サーバー のJSF' –

    +0

    うーん、インプット/バージョンは正確に使用していますか? – BalusC

    答えて

    0

    @BalusC 私たちはこの問題を発見した可能性があります。私はそれを正しく理解すれば、私たちは、この設定を持つビュー・スコープのBeanを通じてセッションスコープのBeanの状態を編集することはできません、今

    <context-param> 
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
        <param-value>client</param-value> 
    </context-param> 
    

    :私たちのweb.xmlでは、我々は次の設定を使用していました...セッションスコープのBeanの状態を変更できる唯一の方法は、Bean自体のコンストラクタまたはPostConstructメソッドです。ビュースコープのBean内からセッションスコープのBeanに加えられた変更は、サーバー上で永続化されませんでした。

    この変数を 'server'に設定すると、状態は実際にサーバーに保持され、毎回クライアントに送信されません。私はこのことがメモリの面でサーバに負荷をかけていることを理解していますが、clientアプローチを使用して問題を解決する方法を知りたいと思います。

    関連する問題