JSFでのクライアント側およびサーバー側の状態保存について

JSFアプリケーションでは、コンポーネントの状態をクライアントのレスポンスに、またはサーバーで保存できます。クライアントでの状態保存は、一部のユーザーがCookieのサポートを無効にしているために必須な場合がありまが、接続が遅いときはレスポンス時間が増加する可能性があります。サーバーに状態を保存すると、ユーザーにとってはメモリーの消費量が多くなるデメリットがありますが、帯域幅の要件は最小限に抑えられます。

開発時には、クライアント側の状態保存を使用することで、ページを変更するたびに新規ビューを確実に作成できます。javax.faces.STATE_SAVING_METHODを状態の保存場所に設定するには、デプロイメント・ディスクリプタweb.xmlにあるcontext-param要素を使用します。次に例を示します。

<!-- Set JSF state saving to client -->
<context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>client</param-value>
</context-param>     

アプリケーションで状態をクライアントに保存する場合は、カスタム・バリデータおよびコンバータの実装によって、StateHolderと、StateHoldersaveState(FacesContext)およびrestoreState(FacesContext, Object)メソッドを実装できます。詳細は、javax.faces.componentStateHolderインタフェースに関するJavadocを参照してください。

注意: 状態をクライアント側に保存すると、コンポーネント・ツリー(ビュー)全体の状態がエンコードされ、非表示フィールドとしてページに記述されます。この結果、リクエストごとに、クライアントとの間で非常に長い文字列の送受信が行われる可能性があります。


JSFでのスコープについて
JSFのweb.xml構成について