パッケージ jakarta.faces.context

クラス Flash

  • 実装されたすべてのインターフェース:
    MapSE<StringSE,​ObjectSE>
    既知の直属サブクラス
    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
    • フィールドの詳細

      • NULL_VALUE

        public static final StringSE NULL_VALUE

        null 値は、PostKeepFlashValueEventPostPutFlashValueEvent などの EventObject のサブクラスのソースとして許可されていないため、null 値がフラッシュに入れられるか、フラッシュに保持される場合、この値は null のソースとして置き換えられます。

        関連事項:
        定数フィールド値
    • コンストラクターの詳細

      • Flash

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

      • 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