クラス StateManagementStrategy
- java.lang.ObjectSE
-
- jakarta.faces.view.StateManagementStrategy
public abstract class StateManagementStrategy extends ObjectSE
ビューの保存と復元をカプセル化して、VDL がこの機能の処理を引き継ぐことができるようにします。
実装は、
UIViewRootでUIComponent.visitTree(jakarta.faces.component.visit.VisitContext, jakarta.faces.component.visit.VisitCallback)を呼び出して、saveView(jakarta.faces.context.FacesContext)メソッドとrestoreView(jakarta.faces.context.FacesContext, java.lang.String, java.lang.String)メソッドでそれぞれビューの保存と復元を実行する必要があります。- 導入:
- 2.0
コンストラクターの概要
コンストラクター コンストラクター 説明 StateManagementStrategy()
方法の概要
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 abstract UIViewRootrestoreView(FacesContext context, StringSE viewId, StringSE renderKitId)リクエストの情報を使用してビューの状態を復元します。abstract ObjectSEsaveView(FacesContext context)Serializableを実装し、java.io.NotSerializableExceptionをスローせずにjava.io.ObjectOutputStream.writeObject()に渡すことができるObjectの現在のビューの状態を返します。デフォルトの実装では、次のアルゴリズムまたはそれに相当するセマンティックを実行し、ここにリストされているすべての手順を明示的に実行する必要があります。
メソッドの詳細
saveView
public abstract ObjectSE saveView(FacesContext context)
Serializableを実装し、java.io.NotSerializableExceptionをスローせずにjava.io.ObjectOutputStream.writeObject()に渡すことができるObjectの現在のビューの状態を返します。デフォルトの実装では、次のアルゴリズムまたはそれに相当するセマンティックを実行し、ここにリストされているすべての手順を明示的に実行する必要があります。現在のビューの
UIViewRootがtransientとマークされている場合は、すぐにnullを返します。ビューをトラバースして、各クライアント ID が一意であることを確認します。複数のクライアント ID が同じ場合は、
IllegalStateExceptionをスローします。UIComponent.visitTree(jakarta.faces.component.visit.VisitContext, jakarta.faces.component.visit.VisitCallback)を使用してツリーにアクセスします。各ノードについて、StateHolder.saveState(jakarta.faces.context.FacesContext)を呼び出し、返されたObjectを、クライアント ID のみを指定して復元できるように保存します。VDL ではなく、このライフサイクルトラバーサル中にプログラムで追加または削除されたコンポーネントのケースを処理するために特別な注意を払う必要があります。
実装では、ツリー内のノードごとに
StateHolder.saveState(jakarta.faces.context.FacesContext)メソッドが呼び出されるようにする必要があります。上記のアルゴリズムを実行して取得した状態を保存するために使用するデータ構造は
Serializableである必要があり、データ構造内のすべての要素もSerializableである必要があります。- パラメーター:
context- このリクエストのFacesContext- 戻り値:
- 保存されたビューステート
- 導入:
- 2.0
restoreView
public abstract UIViewRoot restoreView(FacesContext context, StringSE viewId, StringSE renderKitId)
リクエストの情報を使用してビューの状態を復元します。デフォルトの実装では、次のアルゴリズムまたはそれに相当するセマンティックを実行する必要があります。
最初のリクエストでビューを復元する場合と同様に、ビューのメタデータも復元して適切に処理する必要があります。現在の
viewIdのViewMetadataを取得し、そこからViewMetadata.createMetadataView(jakarta.faces.context.FacesContext)を呼び出します。結果のUIViewRootをFacesContextに格納します。ResponseStateManager.getState(jakarta.faces.context.FacesContext, java.lang.String)から返された状態ObjectからUIViewRootの状態を取得し、それをUIViewRoot.restoreViewScopeState(jakarta.faces.context.FacesContext, java.lang.Object)に渡します。マークアップからビューを作成します。マークアップで明示的に割り当てられた ID を持たないビュー内のすべてのコンポーネントの場合、それらの ID の値は、このビューの最初のリクエストと同じである必要があります。このビューには、前のライフサイクル実行中にプログラムで追加されたコンポーネントは含まれず、前のライフサイクル実行でプログラムによって削除されたコンポーネントが 含まれます。これらの両方のケースを処理する必要があります。
ResponseStateManager.getState(jakarta.faces.context.FacesContext, java.lang.String)を呼び出して、前回のsaveView(jakarta.faces.context.FacesContext)の呼び出しから返されたデータ構造を取得します。UIComponent.visitTree(jakarta.faces.component.visit.VisitContext, jakarta.faces.component.visit.VisitCallback)を使用してツリーにアクセスします。各ノードについて、StateHolder.restoreState(jakarta.faces.context.FacesContext, java.lang.Object)を呼び出し、現在のクライアント ID に対応して保存された状態を渡します。プログラムで削除されたコンポーネントがすべて削除されていることを確認します。
プログラムで追加されたコンポーネントが追加されていることを確認します。
実装では、ライフサイクルの前回の実行時にプログラムで削除されたノードを除き、ツリー内のノードごとに
StateHolder.restoreState(jakarta.faces.context.FacesContext, java.lang.Object)メソッドが呼び出されるようにする必要があります。- パラメーター:
context- このリクエストのFacesContextviewId- 状態を復元する必要があるビュー識別子renderKitId- この状態のレンダーキット ID。- 戻り値:
- 復元されたビューのルート
- 導入:
- 2.0