私はビュースコープとかなり混乱しています。別のページへのJSFナビゲーション(明らかにリダイレクトなし)に耐えられると思いましたが、そうではありません。では、リクエストスコープの代わりにそれを使用する利点は何ですか?同じビューを呼び出した場合、それは同じオブジェクトになりますか?
利点は、Beanが同じビューへのポストバックに耐えることです。 rendered
属性で使用したり、h:dataTable
のモデルとして使用したり、非表示の入力として使用したりする場合は、データを自分で保存する必要はありません。過去には、これを回避するために多くのハックが使用されていました。
ビュースコープのBeanは、同じビューを操作する限り存続します(つまり、void
またはnull
を返します。 Beanアクションメソッド)。 別のビューに移動すると、例:リンクをクリックするか、別のアクション結果を返すと、ビュースコープのBeanはレンダリング応答の終了までに破棄され、次のリクエストで使用できなくなります。
Core JavaServer Faces、3rd Edition から直接リッピング:
スコープを表示
ビュースコープはJSF2.0で追加されました。同じJSFページが再表示されている間、ビュースコープ内のBeanは存続します。 (JSF仕様では、JSFページのビューという用語を使用しています。)ユーザーが別のページに移動するとすぐに、Beanはスコープ外になります。
再表示され続けるページがある場合は、このページのデータを保持するBeanをビュースコープに配置して、セッションスコープのサイズを縮小できます。これは、Ajaxアプリケーションで特に役立ちます。
たぶんあなたはFlowScopedBeanを探しています:
JavaServerFacesテクノロジーのFacesFlows機能を使用すると、要求スコープよりも大きいがセッションよりも小さいスコープFlowScopedを持つページのセットを作成できます。範囲。 たとえば、オンラインストアでチェックアウトプロセス用の一連のページを作成したい場合があります。次のような自己完結型のページのセットを作成できます。必要に応じて、ある店舗から別の店舗に転送できます。