public abstract class StateManagementStrategy extends ObjectSE
ビューの保存と復元をカプセル化して、VDL がこの機能を処理する責任を引き継ぐことができるようにします。ViewDeclarationLanguage.getStateManagementStrategy(jakarta.faces.context.FacesContext, java.lang.String)
は、Jakarta Server Pages ビューの場合は null
を返し、Jakarta Server Faces 2 のフェイスレットで作成されたビューの場合は非 null
を返す必要があるため、この仕様は Jakarta Server Faces 2 のフェイスレットにのみ適用されます。
実装は、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)
メソッドでそれぞれビューの保存と復元を実行する必要があります。
コンストラクターと説明 |
---|
StateManagementStrategy() |
修飾子と型 | メソッドと説明 |
---|---|
abstract UIViewRoot | restoreView(FacesContext context, StringSE viewId, StringSE renderKitId) リクエストの情報を使用してビューの状態を復元します。 |
abstract ObjectSE | saveView(FacesContext context)
|
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
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
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。Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.