パッケージ jakarta.faces.render

クラス ResponseStateManager


  • public abstract class ResponseStateManager
    extends ObjectSE

    ResponseStateManager は、レスポンスの生成に使用されている特定のレンダリングテクノロジを認識している StateManager のヘルパークラスです。これは、RenderKit によって販売されているシングルトン抽象クラスです。このクラスは、非表示フィールド、セッション、その 2 つの組み合わせのいずれであっても、状態を保存するメカニズムを認識しています。

    • コンストラクターの詳細

      • ResponseStateManager

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

      • writeState

        public void writeState​(FacesContext context,
                               ObjectSE state)
                        throws IOExceptionSE

        引数 state を取り、現在の ResponseWriter を使用して出力に書き込みます。これは、すでに正しく配置されている必要があります。

        FacesContext.getViewRoot() を呼び出します。StateHolder.isTransient() が true を返す場合は、実装固有のアクションを実行して、次の isStateless(jakarta.faces.context.FacesContext, java.lang.String) の呼び出しが true を返し、戻るようにします。それ以外の場合は、次のように進めます。

        状態を非表示フィールドに書き出す場合、実装は、文字列を HTTP リクエストパラメーターとして含めるのに適したものにするために、必要なすべての文字置換を行うように注意する必要があります。

        このアプリケーションの状態保存方法が StateManager.STATE_SAVING_METHOD_CLIENT の場合、実装は、改ざんされないようにクライアントに 保存される状態を暗号化する必要があります。

        このアプリケーションの状態保存方法が StateManager.STATE_SAVING_METHOD_SERVER であり、現在のリクエストが Ajax リクエストである場合(PartialViewContext.isAjaxRequest() は true を返します)、使用可能な場合は現在のビュー状態識別子を使用します(新しい識別子を生成しないでください)。

        この ResponseStateManager 実装に関連付けられているレンダーキット識別子を、String 定数 ResponseStateManager.RENDER_KIT_ID_PARAM の値として名前を付けて書き出します。次の場合は、レンダーキット識別子を記述しないでください。

        ClientWindow は、これらの手順を使用して作成する必要があります。ExternalContext.getClientWindow() を呼び出します。結果が null の場合、ClientWindow に関してそれ以上のアクションを実行しないでください。結果が非 null の場合は、名前が CLIENT_WINDOW_PARAM、ID が <VIEW_ROOT_CONTAINER_CLIENT_ID><SEP>jakarta.faces.ClientWindow<SEP><UNIQUE_PER_VIEW_NUMBER> の非表示フィールドを書き込みます。ここで、<SEP> は現在構成されている UINamingContainer.getSeparatorChar() です。<VIEW_ROOT_CONTAINER_CLIENT_ID> は、この状態が発生したビューの UIViewRoot.getContainerClientId() からの戻り値です。<UNIQUE_PER_VIEW_NUMBER> は、このビュー内で一意である必要がある番号ですが、ビューステートに含めることはできません。フィールドの値は実装に依存しますが、ユーザーのセッション内でこのウィンドウを一意に識別する必要があります。

        パラメーター:
        context - 現在のリクエストの FacesContext インスタンス
        state - 以前に保存された直列化された状態情報
        例外:
        IOExceptionSE - state 引数が長さ 2 の配列でない場合。
        導入:
        1.2
      • isStateless

        public boolean isStateless​(FacesContext context,
                                   StringSE viewId)

        writeState(jakarta.faces.context.FacesContext, java.lang.Object) への前の呼び出しがステートレスだった場合は、true を返します。writeState() への前の呼び出しがステートフルであった場合は、false を返します。それ以外の場合は IllegalStateException をスローします。

        このクラスの以前のバージョンから拡張された可能性のあるカスタム実装との下位互換性を維持するために、false を返す実装が提供されています。準拠した実装は、指定されたアクションを実行するためにこのメソッドをオーバーライドする必要があります。

        パラメーター:
        context - 現在のリクエストの FacesContext インスタンス
        viewId - 復元するビューのビュー識別子
        戻り値:
        これの無国籍の価値はライフサイクルを通して実行されます。
        例外:
        NullPointerExceptionSE - 引数 context が null の場合。
        IllegalStateExceptionSE - このメソッドが呼び出され、writeState(jakarta.faces.context.FacesContext, java.lang.Object) への前の呼び出しのステートフル性を判別できない場合。
        導入:
        2.2
      • getState

        public ObjectSE getState​(FacesContext context,
                               StringSE viewId)

        実装は、現在のリクエストをインスペクションし、ツリー構造と writeState(jakarta.faces.context.FacesContext,java.lang.Object) の前の呼び出しに渡されたコンポーネントの状態を表すオブジェクトを返す必要があります。

        このアプリケーションの状態保存方法が StateManager.STATE_SAVING_METHOD_CLIENT の場合、writeState() は改ざんされないように状態を暗号化します。状態が復号化に失敗するか、復号化するが改ざんの証拠を示している場合は、ProtectedViewException をスローする必要があります。

        パラメーター:
        context - 現在のリクエストの FacesContext インスタンス
        viewId - 復元するビューのビュー識別子
        戻り値:
        writeState に渡されたツリー構造とコンポーネントの状態オブジェクト。これが最初のリクエストである場合、このメソッドは null を返します。
        導入:
        1.2
      • isPostback

        public boolean isPostback​(FacesContext context)

        現在のリクエストがポストバックの場合は true を返します。このメソッドは、 ビュー復元フェーズから利用され、ViewHandler.restoreView(jakarta.faces.context.FacesContext, java.lang.String) または ViewHandler.createView(jakarta.faces.context.FacesContext, java.lang.String) のどちらを呼び出す必要があるかを決定します。デフォルトの実装では、この ResponseStateManager インスタンスが、このリクエストがポストバックである前のリクエストで状態を書き出した場合は true を返す必要があり、それ以外の場合は false を返す必要があります。

        標準 HTML RenderKit のこのメソッドの実装は、ExternalContext の requestParameterMap を参照し、シンボリック定数 VIEW_STATE_PARAM の値に等しいキーがある場合にのみ true を返す必要があります。

        Jakarta Faces 1.2 より前の ResponseStateManager の実装との下位互換性のために、ExternalContext の requestParameterMap を参照し、サイズが 0 より大きい場合は true を返すデフォルトの実装が提供されています。

        パラメーター:
        context - 現在のリクエストの FacesContext
        戻り値:
        上記で指定された値
        導入:
        1.2
      • getViewState

        public StringSE getViewState​(FacesContext context,
                                   ObjectSE state)

        この ResponseStateManager でサポートされているレンダリングテクノロジに関連するマークアップなしで、指定された状態を String として返します。

        パラメーター:
        context - 現在のリクエストの FacesContext
        state - 文字列バージョンが生成される状態
        戻り値:
        マークアップの詳細がないこのリクエストのビューステート
        導入:
        2.0
      • getCryptographicallyStrongTokenFromSession

        public StringSE getCryptographicallyStrongTokenFromSession​(FacesContext context)

        準拠した実装は、このアプリケーションのビューを保護するために使用する暗号的に強力なトークンを返す必要があります。以前のリビジョンとの下位互換性のために、単純に null を返すデフォルトの実装が提供されています。

        パラメーター:
        context - 現在のリクエストの FacesContext
        戻り値:
        暗号的に強い価値
        導入:
        2.2