パッケージ jakarta.faces.view

クラス StateManagementStrategy

java.lang.ObjectSE
jakarta.faces.view.StateManagementStrategy

public abstract class StateManagementStrategy extends ObjectSE

ビューの保存と復元をカプセル化して、VDL がこの機能の処理を引き継ぐことができるようにします。

実装は、UIViewRootUIComponent.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
  • コンストラクターの概要

    コンストラクター
    コンストラクター
    説明
  • 方法の概要

    修飾子と型
    メソッド
    説明
    abstract UIViewRoot
    restoreView(FacesContext context, StringSE viewId, StringSE renderKitId)
    リクエストの情報を使用してビューの状態を復元します。
    abstract ObjectSE
    Serializable を実装し、java.io.NotSerializableException をスローせずに java.io.ObjectOutputStream.writeObject() に渡すことができる Object の現在のビューの状態を返します。デフォルトの実装では、次のアルゴリズムまたはそれに相当するセマンティックを実行し、ここにリストされているすべての手順を明示的に実行する必要があります。

    クラス java.lang.ObjectSE から継承されたメソッド

    clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
  • コンストラクターの詳細

    • StateManagementStrategy

      public StateManagementStrategy()
  • メソッドの詳細

    • saveView

      public abstract ObjectSE saveView(FacesContext context)

      Serializable を実装し、java.io.NotSerializableException をスローせずに java.io.ObjectOutputStream.writeObject() に渡すことができる Object の現在のビューの状態を返します。デフォルトの実装では、次のアルゴリズムまたはそれに相当するセマンティックを実行し、ここにリストされているすべての手順を明示的に実行する必要があります。

      1. 現在のビューの UIViewRoot が transient とマークされている場合は、すぐに null を返します。

      2. ビューをトラバースして、各クライアント ID が一意であることを確認します。複数のクライアント ID が同じ場合は、IllegalStateException をスローします。

      3. 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)

      リクエストの情報を使用してビューの状態を復元します。デフォルトの実装では、次のアルゴリズムまたはそれに相当するセマンティックを実行する必要があります。

      1. 最初のリクエストでビューを復元する場合と同様に、ビューのメタデータも復元して適切に処理する必要があります。現在の viewIdViewMetadata を取得し、そこから ViewMetadata.createMetadataView(jakarta.faces.context.FacesContext) を呼び出します。結果の UIViewRootFacesContext に格納します。ResponseStateManager.getState(jakarta.faces.context.FacesContext, java.lang.String) から返された状態 Object から UIViewRoot の状態を取得し、それを UIViewRoot.restoreViewScopeState(jakarta.faces.context.FacesContext, java.lang.Object) に渡します。

        マークアップからビューを作成します。マークアップで明示的に割り当てられた ID を持たないビュー内のすべてのコンポーネントの場合、それらの ID の値は、このビューの最初のリクエストと同じである必要があります。このビューには、前のライフサイクル実行中にプログラムで追加されたコンポーネントは含まれず、前のライフサイクル実行でプログラムによって削除されたコンポーネントが 含まれます。これらの両方のケースを処理する必要があります。

      2. ResponseStateManager.getState(jakarta.faces.context.FacesContext, java.lang.String) を呼び出して、前回の saveView(jakarta.faces.context.FacesContext) の呼び出しから返されたデータ構造を取得します。

      3. UIComponent.visitTree(jakarta.faces.component.visit.VisitContext, jakarta.faces.component.visit.VisitCallback) を使用してツリーにアクセスします。各ノードについて、StateHolder.restoreState(jakarta.faces.context.FacesContext, java.lang.Object) を呼び出し、現在のクライアント ID に対応して保存された状態を渡します。

      4. プログラムで削除されたコンポーネントがすべて削除されていることを確認します。

      5. プログラムで追加されたコンポーネントが追加されていることを確認します。

      実装では、ライフサイクルの前回の実行時にプログラムで削除されたノードを除き、ツリー内のノードごとに StateHolder.restoreState(jakarta.faces.context.FacesContext, java.lang.Object) メソッドが呼び出されるようにする必要があります。

      パラメーター:
      context - このリクエストの FacesContext 
      viewId - 状態を復元する必要があるビュー識別子
      renderKitId - この状態のレンダーキット ID。
      戻り値:
      復元されたビューのルート
      導入:
      2.0