クラス ResponseStateManager
- java.lang.ObjectSE
-
- jakarta.faces.render.ResponseStateManager
public abstract class ResponseStateManager extends ObjectSE
ResponseStateManager は、レスポンスの生成に使用されている特定のレンダリングテクノロジを認識している
StateManager
のヘルパークラスです。これは、RenderKit
によって販売されているシングルトン抽象クラスです。このクラスは、非表示フィールド、セッション、その 2 つの組み合わせのいずれであっても、状態を保存するメカニズムを認識しています。
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static StringSE
CLIENT_WINDOW_PARAM
エンコードされた ClientWindow を参照する非表示フィールドの名前。static StringSE
CLIENT_WINDOW_URL_PARAM
クライアントウィンドウ ID を送信するための URL クエリパラメーターの名前。static StringSE
NON_POSTBACK_VIEW_TOKEN_PARAM
この定数の値は、このアプリケーションの保護されたビューの現在構成されているSet
に関して、受信非ポストバックリクエストの安全性を検証するために値がインスペクションされるリクエストパラメーターの名前と見なされます。static StringSE
RENDER_KIT_ID_PARAM
RenderKit ID を導出するためにViewHandler.calculateRenderKitId(jakarta.faces.context.FacesContext)
のデフォルト実装で使用されるリクエストパラメーターの名前。static StringSE
VIEW_STATE_PARAM
実装では、この定数フィールド値を、リクエスト間の状態を保存するクライアントパラメーターの名前として使用する必要があります。
コンストラクターの概要
コンストラクター コンストラクター 説明 ResponseStateManager()
メソッドのサマリー
すべてのメソッド インスタンスメソッド 具象メソッド 修飾子と型 メソッド 説明 StringSE
getCryptographicallyStrongTokenFromSession(FacesContext context)
準拠する実装は、このアプリケーションのビューを保護するために使用するために、暗号的に強力なトークンを返す必要があります。ObjectSE
getState(FacesContext context, StringSE viewId)
実装は、現在のリクエストをインスペクションし、ツリー構造とwriteState(jakarta.faces.context.FacesContext,java.lang.Object)
の前の呼び出しに渡されたコンポーネントの状態を表すオブジェクトを返す必要があります。StringSE
getViewState(FacesContext context, ObjectSE state)
この ResponseStateManager でサポートされているレンダリングテクノロジに関連するマークアップなしで、指定された状態をString
として返します。boolean
isPostback(FacesContext context)
現在のリクエストがポストバックの場合は true を返します。boolean
isStateless(FacesContext context, StringSE viewId)
writeState(jakarta.faces.context.FacesContext, java.lang.Object)
への前の呼び出しがステートレスだった場合は、true
を返します。void
writeState(FacesContext context, ObjectSE state)
フィールドの詳細
RENDER_KIT_ID_PARAM
public static final StringSE RENDER_KIT_ID_PARAM
RenderKit ID を導出するために
ViewHandler.calculateRenderKitId(jakarta.faces.context.FacesContext)
のデフォルト実装で使用されるリクエストパラメーターの名前。- 関連事項:
- 定数フィールド値
VIEW_STATE_PARAM
public static final StringSE VIEW_STATE_PARAM
実装では、この定数フィールド値を、リクエスト間の状態を保存するクライアントパラメーターの名前として使用する必要があります。
id
属性は、UIComponent.getContainerClientId(jakarta.faces.context.FacesContext)
からの戻り値、UINamingContainer.getSeparatorChar(jakarta.faces.context.FacesContext)
からの戻り値、この定数フィールド値、区切り文字、この種のクライアントパラメーターの他のすべてのインスタンスに関して一意であることが保証されている数値を連結したものでなければなりません。ビュー。少なくともこのパラメーターの値を予測することを困難にすることにより、実装がクロスサイトスクリプティング攻撃から保護することを強くお勧めします。
- 導入:
- 1.2
- 関連事項:
- 定数フィールド値
CLIENT_WINDOW_PARAM
public static final StringSE CLIENT_WINDOW_PARAM
エンコードされた ClientWindow を参照する非表示フィールドの名前。このフィールドは、
ClientWindow.CLIENT_WINDOW_MODE_PARAM_NAME
が "none" でない場合にのみ使用されます。id
属性は、UIComponent.getContainerClientId(jakarta.faces.context.FacesContext)
からの戻り値、UINamingContainer.getSeparatorChar(jakarta.faces.context.FacesContext)
からの戻り値、この定数フィールド値、区切り文字、この種のクライアントパラメーターの他のすべてのインスタンスに関して一意であることが保証されている数値を連結したものでなければなりません。景色。このパラメーターの値は、ClientWindow.getId()
からの戻り値です。- 導入:
- 2.2
- 関連事項:
- 定数フィールド値
CLIENT_WINDOW_URL_PARAM
public static final StringSE CLIENT_WINDOW_URL_PARAM
クライアントウィンドウ ID を送信するための URL クエリパラメーターの名前。このパラメーターは、
ClientWindow.CLIENT_WINDOW_MODE_PARAM_NAME
が "none" でない場合にのみ使用されます。パラメーターの名前は、このフィールドの定数値によって指定されます。このパラメーターの値は、ClientWindow.getId()
からの戻り値です。- 導入:
- 2.2
- 関連事項:
- 定数フィールド値
メソッドの詳細
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
の値として名前を付けて書き出します。次の場合は、レンダーキット識別子を記述しないでください。- これは、
Application.getDefaultRenderKitId()
またはによって返されるデフォルトのレンダーキット識別子です。 - レンダーキット識別子は
jakarta.faces.render.RenderKitFactory.HTML_BASIC_RENDER_KIT
の値であり、Application.getDefaultRenderKitId()
はnull
を返します。
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