public abstract class Flash extends ObjectSE implements MapSE<StringSE,ObjectSE>
フラッシュのコンセプトは Rails に Ruby から取られ、顔のライフサイクルによって生成されたユーザビュー間の一時的なオブジェクトを渡す方法を提供しています。Rails の場合と同様に、フラッシュ内の 1 つの場所はすべて、同じユーザーセッションが遭遇する次のビューに公開され、その後クリアされます。「次のビュー」は、前のビューと同じビュー ID を持つ場合があることに注意することが重要です。
実装要件
フラッシュは、スレッドセーフである必要があるセッションスコープのオブジェクトです。
実装要件は、Jakarta Server 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 Server Faces 2 の両方から使用できることを確認する必要があります。Map
インターフェースを公開することに加えて、Flash
自体のメソッドとして公開されるいくつかの機能があります。これらの各機能には、javadoc に従って、Jakarta Expression Language を介してアクセスすることもできます。
Jakarta Expression Language Usage Example
最初のページ
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"> <!-- extra code removed --> <c:set target="#{flash}" property="foo" value="fooValue" />
次ページ
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/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="http://xmlns.jcp.org/jsf/core" xmlns:h="http://xmlns.jcp.org/jsf/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 リクエストを処理するまで、値が実際にフラッシュに入らないためです。
Map.EntrySE<KSE, VSE>
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | NULL_VALUE
|
コンストラクターと説明 |
---|
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)
|
abstract void | putNow(StringSE key, ObjectSE value) 次のトラバーサルではなく、ライフサイクルのこのトラバーサルでアクセスできるように、値をフラッシュに入れます。 |
abstract void | setKeepMessages(boolean newValue)
|
abstract void | setRedirect(boolean newValue) このプロパティを |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
clearSE, computeSE, computeIfAbsentSE, computeIfPresentSE, containsKeySE, containsValueSE, entrySetSE, equalsSE, forEachSE, getSE, getOrDefaultSE, hashCodeSE, isEmptySE, keySetSE, mergeSE, putSE, putAllSE, putIfAbsentSE, removeSE, removeSE, replaceSE, replaceSE, replaceAllSE, sizeSE, valuesSE
public static final StringSE NULL_VALUE
null
値は、PostKeepFlashValueEvent
や PostPutFlashValueEvent
などの EventObject
のサブクラスのソースとして許可されていないため、null
値がフラッシュに入れられるか、フラッシュに保持される場合、この値は null
のソースとして置き換えられます。
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="http://xmlns.jcp.org/jsp/jstl/core"> <!-- extra code removed --> <c:set target="#{flash}" property="keepMessages" value="true" />
次ページ
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"> <!-- extra code removed --> <h:messages /> Any messages present on the first page must be displayed on this page.
public abstract void setKeepMessages(boolean newValue)
keepMessages
JavaBeans プロパティの Setter。isKeepMessages()
を参照してください。
newValue
- このセッションのこのプロパティの新しい値。public abstract boolean isRedirect()
このセッションのフラッシュのこのプロパティの値を返します。次の場合を除き、これは false
でなければなりません。
setRedirect(boolean)
は、true
を引数として、現在のライフサイクルトラバーサルで呼び出されました。
このセッションの現在のライフサイクルトラバーサルは「実行」フェーズにあり、前のトラバーサルでは、true
を引数として setRedirect(boolean)
が呼び出されました。
public abstract void setRedirect(boolean newValue)
このプロパティを true
に設定すると、このセッションの次のリクエストがリダイレクトになります。リダイレクト時に、サーバーは特定の URI に新しいリクエストを発行するように指示する特別なレスポンスをクライアントに送信することを思い出してください。実装は、そのリクエストでこのプロパティの値を読み取ると true
が返されることを保証する必要があります。
Jakarta Expression Language Usage Example
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"> <!-- extra code removed --> <c:set target="#{flash}" property="redirect" value="true" />
newValue
- このセッションのこのプロパティの新しい値。public abstract void putNow(StringSE key, ObjectSE value)
次の走査ではなく、このライフサイクルの走査でアクセスできるように、値をフラッシュに入れます。これは、リクエストマップに値を配置するための単なるエイリアスです。
Jakarta Expression Language Usage Example
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://xmlns.jcp.org/jsp/jstl/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
- このエントリの値 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>}
へのセットが呼び出されていました。public abstract void doPrePhaseActions(FacesContext ctx)
すべてのライフサイクルフェーズの実行前に呼び出されるこのメソッドにより、実装は、ライフサイクルを処理するリクエストに適用される Flash スコープ契約を提供するために必要なアクションを実行できます。
ctx
- このリクエストの FacesContext
public abstract void doPostPhaseActions(FacesContext ctx)
すべてのライフサイクルフェーズの実行後に呼び出されるこのメソッドにより、実装は、ライフサイクルを処理するリクエストに適用される Flash スコープ契約を提供するために必要なアクションを実行できます。
ctx
- このリクエストの FacesContext
Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.