クラス 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 UIViewRoot
restoreView(FacesContext context, StringSE viewId, StringSE renderKitId)
リクエストの情報を使用してビューの状態を復元します。abstract ObjectSE
saveView(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
- このリクエストのFacesContext
viewId
- 状態を復元する必要があるビュー識別子renderKitId
- この状態のレンダーキット ID。- 戻り値:
- 復元されたビューのルート
- 導入:
- 2.0