3

すべて

JSF2(tomcat7でMojarra + primeFacesを使用)の初心者で、ManagedPropertyオブジェクトの奇妙な動作が発生します。

@ManagedBean
@ViewScoped
public class CreateFactMB implements Serializable{

    @ManagedProperty(value="#{collectionFactTable}") 
    private CollectionFactTable collectionFactTable; //SessionBean
    ...
    //setters/getters

ページを開くとオブジェクトを印刷しました(ブラウザを更新します)collectionTreeのインスタンスが1つ表示されます

mbeans.CollectionFactTable@12803ba

しかし、私がajaxリクエストを行うとき

<p:commandButton id="btn1" value="Save" update="growl"
                actionListener="#{createFactMB.doUpdate}" />    

doUpdateで、collectionTreeの別のインスタンスが表示されます

mbeans.CollectionFactTable@625c49

ajaxアクション中は変更できないため問題です(コピーしただけなので)

誰かが私を助けることができますか?私が正しくないことは何ですか?

4

1 に答える 1

1

JSFでSessionScopedの永続性がどのように機能するかについて誤解していると思います。この動作は予期されたものであり、正常です。

ここに画像の説明を入力してください

リクエストの開始時に、スコープに関係なく、すべての管理対象Beanがインスタンス化されます。ビューの復元フェーズでは、セッションベースの永続性の値が新しい管理対象Beanオブジェクトに設定され、SessionScopedBeanを最後の応答が送信される前の最後の状態に効果的に復元します。

応答が完了して送信されると、これらのマネージドBeanインスタンスのデータは永続化され、オブジェクトはガベージコレクションのために逆参照されます。プロセスは、Ajaxであるかどうかに関係なく、次のリクエストで新たに開始されます。

于 2012-07-19T13:10:21.547 に答える