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 この定数の値は、このアプリケーションの保護されたビューの現在構成されている |
static StringSE | RENDER_KIT_ID_PARAM RenderKit ID を導出するために ViewHandler.calculateRenderKitId(jakarta.faces.context.FacesContext) のデフォルト実装で使用されるリクエストパラメーターの名前。 |
static StringSE | VIEW_STATE_PARAM 実装では、この定数フィールド値を、リクエスト間の状態を保存するクライアントパラメーターの名前として使用する必要があります。 |
コンストラクターと説明 |
---|
ResponseStateManager() |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final StringSE RENDER_KIT_ID_PARAM
RenderKit ID を導出するために ViewHandler.calculateRenderKitId(jakarta.faces.context.FacesContext)
のデフォルト実装で使用されるリクエストパラメーターの名前。
public static final StringSE VIEW_STATE_PARAM
実装では、この定数フィールド値を、リクエスト間の状態を保存するクライアントパラメーターの名前として使用する必要があります。id
属性は、UIComponent.getContainerClientId(jakarta.faces.context.FacesContext)
からの戻り値、UINamingContainer.getSeparatorChar(jakarta.faces.context.FacesContext)
からの戻り値、この定数フィールド値、区切り文字、この種のクライアントパラメーターの他のすべてのインスタンスに関して一意であることが保証されている数値を連結したものでなければなりません。ビュー。
少なくともこのパラメーターの値を予測することを困難にすることにより、実装がクロスサイトスクリプティング攻撃から保護することを強くお勧めします。
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()
からの戻り値です。
public static final StringSE CLIENT_WINDOW_URL_PARAM
クライアントウィンドウ ID を送信するための URL クエリパラメーターの名前。このパラメーターは、ClientWindow.CLIENT_WINDOW_MODE_PARAM_NAME
が "none" でない場合にのみ使用されます。パラメーターの名前は、このフィールドの定数値によって指定されます。このパラメーターの値は、ClientWindow.getId()
からの戻り値です。
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
を返します。 既存の ResponseStateManager
実装との下位互換性のため、このメソッドのデフォルト実装では、引数が SerializedView
のインスタンスであるかどうかを確認します。そうである場合は、writeState(jakarta.faces.context.FacesContext,jakarta.faces.application.StateManager.SerializedView)
を呼び出します。そうでない場合は、状態が 2 つの要素の Object 配列であると想定されます。SerializedView
のインスタンスを作成し、状態を treeStructure として保存し、writeState(jakarta.faces.context.FacesContext,jakarta.faces.application.StateManager.SerializedView)
に渡します。
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 の配列でない場合。@DeprecatedSE public void writeState(FacesContext context, StateManager.SerializedView state) throws IOExceptionSE
writeState(jakarta.faces.context.FacesContext,java.lang.Object)
に置き換えられました。デフォルトの実装では、最初の要素が StateManager.SerializedView.getStructure()
の呼び出しからの戻り値、2 番目の要素が StateManager.SerializedView.getState()
からの戻り値である 2 つの要素の Object
配列が作成されます。次に、この Object
配列を writeState(jakarta.faces.context.FacesContext, java.lang.Object)
に渡します。 引数 state
を取り、現在の ResponseWriter
を使用して出力に書き込みます。これは、すでに正しく配置されている必要があります。
StateManager.SerializedView
を非表示フィールドに書き出す場合、実装は、文字列を HTTP リクエストパラメーターとして含めるのに適したものにするために、必要なすべての文字置換を行うように注意する必要があります。
このアプリケーションの状態保存方法が StateManager.STATE_SAVING_METHOD_CLIENT
の場合、実装はクライアントに保存される状態を暗号化する場合があります。状態をクライアントが読み取れないようにし、改ざんが明らかであることをお勧めします。リファレンス実装は、これらの推奨事項に従います。
context
- 現在のリクエストの FacesContext
インスタンス state
- 以前に保存された直列化された状態情報 IOExceptionSE
- なんらかの理由で状態を書き込めない場合 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)
への前の呼び出しのステートフル性を判別できない場合。public ObjectSE getState(FacesContext context, StringSE viewId)
実装は、現在のリクエストをインスペクションし、ツリー構造と writeState(jakarta.faces.context.FacesContext,java.lang.Object)
の前の呼び出しに渡されたコンポーネントの状態を表すオブジェクトを返す必要があります。
このアプリケーションの状態保存方法が StateManager.STATE_SAVING_METHOD_CLIENT
の場合、writeState()
は改ざんされないように状態を暗号化します。状態が復号化に失敗するか、復号化するが改ざんの証拠を示している場合は、ProtectedViewException
をスローする必要があります。
既存の ResponseStateManager
実装との下位互換性のために、このメソッドのデフォルトの実装は getTreeStructureToRestore(jakarta.faces.context.FacesContext, java.lang.String)
および getComponentStateToRestore(jakarta.faces.context.FacesContext)
を呼び出し、structure
プロパティを含む要素 0 と SerializedView
の state
プロパティを含む要素 1 を持つ 2 要素 Object
配列を作成して返します。
context
- 現在のリクエストの FacesContext
インスタンス viewId
- 復元するビューのビュー識別子 writeState
に渡されたツリー構造とコンポーネントの状態オブジェクト。これが最初のリクエストである場合、このメソッドは null
を返します。@DeprecatedSE public ObjectSE getTreeStructureToRestore(FacesContext context, StringSE viewId)
getState(jakarta.faces.context.FacesContext, java.lang.String)
に置き換えられました。デフォルトの実装は null
を返します。 実装は、現在のリクエストをインスペクションし、writeState()
の前回の呼び出しで渡されたツリー構造オブジェクトを返す必要があります。
context
- 現在のリクエストの FacesContext
インスタンス viewId
- 復元するビューのビュー識別子 @DeprecatedSE public ObjectSE getComponentStateToRestore(FacesContext context)
getState(jakarta.faces.context.FacesContext, java.lang.String)
に置き換えられました。デフォルトの実装は null
を返します。 実装は、現在のリクエストをインスペクションし、writeState()
の前回の呼び出しで渡されたコンポーネント状態オブジェクトを返す必要があります。
context
- 現在のリクエストの FacesContext
インスタンス 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 Server Faces 1.2 より前の ResponseStateManager
の実装との下位互換性のために、ExternalContext
の requestParameterMap
を参照し、サイズが 0 より大きい場合は true
を返すデフォルトの実装が提供されています。
context
- 現在のリクエストの FacesContext
。public StringSE getViewState(FacesContext context, ObjectSE state)
この ResponseStateManager でサポートされているレンダリングテクノロジに関連するマークアップなしで、指定された状態を String
として返します。
context
- 現在のリクエストの FacesContext
state
- 文字列バージョンが生成される状態 public StringSE getCryptographicallyStrongTokenFromSession(FacesContext context)
準拠する実装は、このアプリケーションのビューを保護するために使用するために、暗号的に強力なトークンを返す必要があります。以前のリビジョンとの下位互換性のために、null
を返すだけのデフォルトの実装が提供されています。
context
- 現在のリクエストの FacesContext
Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.