クラス Flash
- java.lang.ObjectSE
-
- jakarta.faces.context.Flash
- 既知の直属サブクラス
FlashWrapper
public abstract class Flash extends ObjectSE implements MapSE<StringSE,ObjectSE>
フラッシュのコンセプトは Rails に Ruby から取られ、顔のライフサイクルによって生成されたユーザビュー間の一時的なオブジェクトを渡す方法を提供しています。Rails の場合と同様に、フラッシュ内の 1 つの場所はすべて、同じユーザーセッションが遭遇する次のビューに公開され、その後クリアされます。「次のビュー」は、前のビューと同じビュー ID を持つ場合があることに注意することが重要です。
実装要件
フラッシュは、スレッドセーフである必要があるセッションスコープのオブジェクトです。
実装要件は、Jakarta Faces ライフサイクルを横断するランタイムの観点から説明されます。フラッシュは、2 つの論理マップで
Map
インターフェースを公開します。どの論理マップにアクセスするかの選択は、現在のフェイスのライフサイクルフェーズによって異なります。1 つの論理マップは現在のトラバーサル用で、もう 1 つは次のトラバーサル用です。ライフサイクルの実行部分では、すべてのフラッシュアクセスが現在のトラバーサルマップに送信されます。ライフサイクルのレンダリング部分では、すべてのフラッシュアクセスが次のトラバーサルマップに送信されます。ライフサイクルの次のトラバーサルでは、実装は、現在のトラバーサルマップが前のトラバーサルの次のトラバーサルマップであることを確認する必要があります。これは、説明のみを目的とした例です。Faces ライフサイクルへの最初のリクエストを検討する
トラバーサル N、実行フェーズ: 最初のリクエストではスキップされました。
トラバーサル N、レンダリングフェーズ: フラッシュアクセスはフラッシュ [N] に移動します。
トラバーサル N + 1、実行フェーズ: フラッシュアクセスはフラッシュ [N] に移動します。
トラバーサル N + 1、レンダリングフェーズ: フラッシュアクセスはフラッシュ [N + 1] に移動します。
実装では、
<redirect />
を含む<navigation-case>
の場合でも、フラッシュの適切な動作が保持されるようにする必要があります。実装は、同じセッションで隣接する GET リクエストの場合でも、フラッシュの適切な動作が保持されることを保証する必要があります。これにより、Faces アプリケーションは "Post/Redirect/Get" デザインパターンを完全に活用できます。実装では、ユーザーが Jakarta Expression Language 暗黙オブジェクト
flash
およびExternalContext.getFlash()
を介してフラッシュにアクセスできるようにする必要があります。実装では、フラッシュが Jakarta Server Pages と Facelets for Jakarta Faces 2 の両方から使用できることを確認する必要があります。Map
インターフェースを公開することに加えて、Flash
自体のメソッドとして公開されるいくつかの機能があります。これらの各機能には、javadoc に従って、Jakarta Expression Language を介してアクセスすることもできます。Jakarta Expression Language Usage Example
最初のページ
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="jakarta.tags.core"> <!-- extra code removed --> <c:set target="#{flash}" property="foo" value="fooValue" />
次ページ
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="jakarta.faces.html"> <!-- extra code removed --> <h:outputText value="#{flash.foo}" /> will be "fooValue" without the quotes.
同じ使用構文が Jakarta Server Pages で使用可能でなければなりません。
h:button
やh:link
など、ブラウザーがクリック時に GET リクエストを発行する出力コンポーネントと連携してフラッシュを使用する場合は、追加のアクションを実行する必要があることに注意してください。次の例は、このような状況でフラッシュを使用する 1 つの方法を示しています。最初のページ
<h:button id="nextButton" value="Next (button)" outcome="next.xhtml"> <f:param name="foo" value="bar"/> </h:button>
次ページ
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="jakarta.faces.core" xmlns:h="jakarta.faces.html"> <f:metadata> <f:viewParam name="foo" id="foo" value="#{flash.now.foo}" /> </f:metadata> <head /><body> foo = #{flash.foo} </body> </html>
この例では、2 番目のページで
#{flash.now}
を使用していることに注意してください。これは、ボタンがクリックされたためにサーバーがブラウザーから送信された GET リクエストを処理するまで、値が実際にフラッシュに入らないためです。- 導入:
- 2.0
フィールドサマリー
フィールド 修飾子と型 フィールド 説明 static StringSE
NULL_VALUE
null
値は、PostKeepFlashValueEvent
やPostPutFlashValueEvent
などのEventObject
のサブクラスのソースとして許可されていないため、null
値がフラッシュに入れられるか、フラッシュに保持される場合、この値はnull
のソースとして置き換えられます。
コンストラクターのサマリー
コンストラクター コンストラクター 説明 Flash()
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 abstract void
doPostPhaseActions(FacesContext ctx)
すべてのライフサイクルフェーズの実行後に呼び出されるこのメソッドにより、実装は、ライフサイクルを処理するリクエストに適用される Flash スコープ契約を提供するために必要なアクションを実行できます。abstract void
doPrePhaseActions(FacesContext ctx)
すべてのライフサイクルフェーズの実行前に呼び出されるこのメソッドにより、実装は、ライフサイクルを処理するリクエストに適用される Flash スコープ契約を提供するために必要なアクションを実行できます。abstract boolean
isKeepMessages()
このセッションのフラッシュのこの JavaBeans プロパティの値を返します。abstract boolean
isRedirect()
このセッションのフラッシュのこのプロパティの値を返します。abstract void
keep(StringSE key)
putNow(java.lang.String, java.lang.Object)
、その Jakarta Expression Language 同等物、またはリクエストMap
への以前の呼び出しで保存された値をフラッシュに昇格させ、このセッションのライフサイクルの次のトラバーサルで利用できるようにします。abstract void
putNow(StringSE key, ObjectSE value)
次のトラバーサルではなく、ライフサイクルのこのトラバーサルでアクセスできるように、値をフラッシュに入れます。abstract void
setKeepMessages(boolean newValue)
keepMessages
JavaBeans プロパティの Setter。abstract void
setRedirect(boolean newValue)
このプロパティをtrue
に設定すると、このセッションでの次のリクエストはリダイレクトになります。クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース java.util.MapSE から継承されたメソッド
clear, computeSE, computeIfAbsentSE, computeIfPresentSE, containsKeySE, containsValueSE, entrySet, equalsSE, forEachSE, getSE, getOrDefaultSE, hashCode, isEmpty, keySet, mergeSE, putSE, putAllSE, putIfAbsentSE, removeSE, removeSE, replaceSE, replaceSE, replaceAllSE, size, values
フィールドの詳細
NULL_VALUE
public static final StringSE NULL_VALUE
null
値は、PostKeepFlashValueEvent
やPostPutFlashValueEvent
などのEventObject
のサブクラスのソースとして許可されていないため、null
値がフラッシュに入れられるか、フラッシュに保持される場合、この値はnull
のソースとして置き換えられます。- 関連事項:
- 定数フィールド値
メソッドの詳細
isKeepMessages
public abstract boolean isKeepMessages()
このセッションのフラッシュのこの JavaBeans プロパティの値を返します。この値は、現在の
FacesContext
のキューに入れられたFacesMessage
インスタンスを保存する必要があるかどうかを決定し、リクエストがポスト後のリダイレクトまたは通常のポストバックに関係なく、このセッションのライフサイクルの次のトラバースでアクセスできるようにします。特殊キー "keepMessages
" に対するMap
アクセスは、この JavaBeans プロパティの値を返す必要があります。Jakarta Expression Language Usage Example
最初のページ
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="jakarta.tags.core"> <!-- extra code removed --> <c:set target="#{flash}" property="keepMessages" value="true" />
次ページ
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="jakarta.faces.html"> <!-- extra code removed --> <h:messages /> Any messages present on the first page must be displayed on this page.
- 戻り値:
- メッセージを保持するかどうかを示すブールフラグ。
- 導入:
- 2.0
setKeepMessages
public abstract void setKeepMessages(boolean newValue)
keepMessages
JavaBeans プロパティの Setter。isKeepMessages()
を参照してください。- パラメーター:
newValue
- このセッションのこのプロパティの新しい値。- 導入:
- 2.0
isRedirect
public abstract boolean isRedirect()
このセッションのフラッシュのこのプロパティの値を返します。次の場合を除き、これは
false
でなければなりません。setRedirect(boolean)
は、true
を引数として、現在のライフサイクルトラバーサルで呼び出されました。このセッションの現在のライフサイクルトラバーサルは「実行」フェーズにあり、前のトラバーサルでは、
true
を引数としてsetRedirect(boolean)
が呼び出されました。
- 戻り値:
- このセッションのフラッシュのこのプロパティの値。
setRedirect
public abstract void setRedirect(boolean newValue)
このプロパティを
true
に設定すると、このセッションの次のリクエストがリダイレクトになります。リダイレクト時に、サーバーは特定の URI に新しいリクエストを発行するように指示する特別なレスポンスをクライアントに送信することを思い出してください。実装は、そのリクエストでこのプロパティの値を読み取るとtrue
が返されることを保証する必要があります。Jakarta Expression Language Usage Example
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="jakarta.tags.core"> <!-- extra code removed --> <c:set target="#{flash}" property="redirect" value="true" />
- パラメーター:
newValue
- このセッションのこのプロパティの新しい値。- 導入:
- 2.0
putNow
public abstract void putNow(StringSE key, ObjectSE value)
次の走査ではなく、このライフサイクルの走査でアクセスできるように、値をフラッシュに入れます。これは、リクエストマップに値を配置するための単なるエイリアスです。
Jakarta Expression Language Usage Example
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="jakarta.tags.core"> <!-- extra code removed --> <c:set target="#{flash.now}" property="bar" value="barValue" /> <p>Value of \#{flash.now.bar}, should be barValue.</p> <h:outputText value="#{flash.now.bar}" />
- パラメーター:
key
- このエントリのキーvalue
- このエントリの値- 導入:
- 2.0
keep
public abstract void keep(StringSE key)
putNow(java.lang.String, java.lang.Object)
、その Jakarta Expression Language 同等物、またはリクエストMap
への以前の呼び出しで保存された値をフラッシュに昇格させ、このセッションのライフサイクルの次のトラバーサルで利用できるようにします。- パラメーター:
key
- 引数key
が、putNow(java.lang.String, java.lang.Object)
への呼び出しを介してライフサイクルを通じてこのトラバーサルのフラッシュに以前に格納されたエントリの名前である場合、または EL 式#{flash.now.<key>}
、リクエストMap
へのセットに、あたかもフラッシュにプロモートされる場合put()
への呼び出し、または式#{flash.<key>}
へのセットが呼び出されていました。
doPrePhaseActions
public abstract void doPrePhaseActions(FacesContext ctx)
すべてのライフサイクルフェーズの実行前に呼び出されるこのメソッドにより、実装は、ライフサイクルを処理するリクエストに適用される Flash スコープ契約を提供するために必要なアクションを実行できます。
- パラメーター:
ctx
- このリクエストのFacesContext
doPostPhaseActions
public abstract void doPostPhaseActions(FacesContext ctx)
すべてのライフサイクルフェーズの実行後に呼び出されるこのメソッドにより、実装は、ライフサイクルを処理するリクエストに適用される Flash スコープ契約を提供するために必要なアクションを実行できます。
- パラメーター:
ctx
- このリクエストのFacesContext