クラス FlowHandler
- java.lang.ObjectSE
-
- jakarta.faces.flow.FlowHandler
public abstract class FlowHandler extends ObjectSE
FlowHandler は、ランタイムがフェイスフロー機能と対話できるようにする主要なエントリポイントです。
NavigationHandler
は、フローに関連するナビゲーション上の決定を行う必要がある場合にこのクラスを使用します。フェイスフロー機能は、ClientWindow
機能と CDI に完全に依存しています。フローの定義
実装は、アプリケーション構成リソースの XML スキーマ定義で指定されている
<flow-definition>
要素を使用するか、FlowBuilder
API を使用して、フェースフローの定義をサポートする必要があります。フローを定義する追加の手段は、FlowHandlerFactory
を装飾することによって提供される場合があります。フローの管理
このクラスのシングルトンインスタンスはスレッドセーフである必要があるため、ユーザーごとの状態を格納してはなりません。ただし、フローはユーザーごとにトラバースされるため、現在の
ClientWindow
に関連付ける必要があります。さらに、フローはネストされる場合があります。これらの要件は、スタックのようなランタイムデータ構造でフローを管理し、ユーザーごとに保存され、ClientWindow
に関連付けられることを強くお勧めします。フローインスタンスは不変ですが、フロースタックはユーザーごとであるため、実装では、フロースコープのデータ(FlowScoped
として宣言されたマネージド Bean およびgetCurrentFlowScope()
によって返されるMap
に格納されたデータ)を完全に再入可能にする必要があります。例: A と B の 2 つのフローがあり、それぞれが 1 つのFlowScoped
BeanMyBeanA
とMyBeanB
を持つアプリケーションについて考えてみます。フロー A に入ると、MyBeanA
がアクティブになります。A から B に呼び出すと、MyBeanB
がアクティブになります。A にコールバックすると、MyBeanA
の以前のインスタンスが再アクティブ化されるのではなく、MyBeanA
の新しいインスタンスがアクティブになります。フローグラフ
以前のバージョンの仕様ではフローグラフが定義されていましたが、グラフ内のノードの種類は VDL ビューのみでした。Faces Flow 機能は現在、次のノード型を定義しています。
表示
これは、最初から仕様に含まれている通常の Jakarta Faces VDL View です。
切り替え
これは Jakarta Expression Language 式のリストです。制御がスイッチノードに渡されると、リスト内の各式が評価され、
true
を返す最初の式を使用して、制御を渡す必要がある次のノードの ID が定義されます。どの式もtrue
に評価されない場合、制御は指定されたデフォルト ID に渡されます。リターン
このノード型は、呼び出しフローに返される結果を指定します。
メソッド呼び出し
このノード型では、フローの実行の任意の時点で任意のアプリケーションロジックを呼び出すことができます。メソッドが呼び出された後にナビゲーションケースがナビゲートされるようにする結果を指定できます。
フェイスフローコール
このノード型により、あるフローが別のフローを呼び出すことができます。呼び出しフローはアクティブのままであり、制御が呼び出されたフローから戻るまで終了しません。
グラフのエッジは、既存の Jakarta Faces ナビゲーションルールシステムによって定義されます。
フローとモデルオブジェクト
CDI アノテーション
FlowScoped
でアノテーションが付けられたマネージド Bean は、参照されると、指定されたスコープへのユーザーエージェントのエントリの後に遅延して作成され、ユーザーエージェントがフローを離れるときにガベージコレクションに使用できるようにする必要があります。flowScope
Jakarta Expression Language 暗黙オブジェクトは、「現在の」勾配に値を格納するためにも使用できます。このスコープに格納されている値は、ユーザーエージェントがフローを離れるときにガベージコレクションに使用できるようにする必要があります。- 導入:
- 2.2
フィールドサマリー
フィールド 修飾子と型 フィールド 説明 static StringSE
FLOW_ID_REQUEST_PARAM_NAME
コンポーネントファミリjakarta.faces.OutcomeTarget
のRenderers
によってレンダリングされるコンポーネントは、この定数を、このコンポーネントが入力されるフローのフロー ID を表すパラメーターのパラメーター名として使用する必要があります。static StringSE
NULL_FLOW
コンポーネントファミリjakarta.faces.OutcomeTarget
のRenderers
によってレンダリングされるコンポーネントは、そのようなコンポーネントを使用してフローから(別のフローに入らずに)戻るときに、TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME
によって指定されたパラメーターの値としてこの定数を使用する必要があります。static StringSE
TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME
コンポーネントファミリjakarta.faces.OutcomeTarget
のRenderers
によってレンダリングされるコンポーネントは、この定数を、このコンポーネントが入力されるフローの定義ドキュメント ID を表すパラメーターのパラメーター名として使用する必要があります。
コンストラクターのサマリー
コンストラクター コンストラクター 説明 FlowHandler()
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 具象メソッド 修飾子と型 メソッド 説明 abstract void
addFlow(FacesContext context, Flow toAdd)
現在のアプリケーションで認識されているFlow
のコレクションに引数Flow
を追加します。abstract void
clientWindowTransition(FacesContext context)
コンポーネントファミリjakarta.faces.OutcomeTarget
のレンダラーによってレンダリングされたコンポーネントの場合にフロー遷移を許可します。Flow
getCurrentFlow()
FacesContext.getCurrentInstance()
を呼び出してからgetCurrentFlow(jakarta.faces.context.FacesContext)
を呼び出す便利なオーバーロード。abstract Flow
getCurrentFlow(FacesContext context)
abstract MapSE<ObjectSE,ObjectSE>
getCurrentFlowScope()
#{flowScope}
Jakarta Expression Language 暗黙オブジェクトをバックアップするMap
を返します。現在アクティブなフローがない場合は、null
を返します。abstract Flow
getFlow(FacesContext context, StringSE definingDocumentId, StringSE id)
abstract StringSE
getLastDisplayedViewId(FacesContext context)
getCurrentFlow(jakarta.faces.context.FacesContext)
によって返される現在のフローの最後に表示された viewId を返します。現在のフローがない場合はnull
を返します。abstract boolean
isActive(FacesContext context, StringSE definingDocument, StringSE id)
引数definingDocument
およびid
によって参照されるフローが現在アクティブである場合にのみ、true
を返します。abstract void
popReturnMode(FacesContext context)
リターンノードを処理するときに、ナビゲーションの正しい処理を有効にします。abstract void
pushReturnMode(FacesContext context)
リターンノードを処理するときに、ナビゲーションの正しい処理を有効にします。abstract void
transition(FacesContext context, Flow sourceFlow, Flow targetFlow, FlowCallNode outboundCallNode, StringSE toViewId)
現在のユーザーのClientWindow
のフローグラフで遷移を実行します。
フィールドの詳細
FLOW_ID_REQUEST_PARAM_NAME
public static final StringSE FLOW_ID_REQUEST_PARAM_NAME
コンポーネントファミリ
jakarta.faces.OutcomeTarget
のRenderers
によってレンダリングされるコンポーネントは、この定数を、このコンポーネントが入力されるフローのフロー ID を表すパラメーターのパラメーター名として使用する必要があります。- 導入:
- 2.2
- 関連事項:
- 定数フィールド値
TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME
public static final StringSE TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME
コンポーネントファミリ
jakarta.faces.OutcomeTarget
のRenderers
によってレンダリングされるコンポーネントは、この定数を、このコンポーネントが入力されるフローの定義ドキュメント ID を表すパラメーターのパラメーター名として使用する必要があります。- 導入:
- 2.2
- 関連事項:
- 定数フィールド値
NULL_FLOW
public static final StringSE NULL_FLOW
コンポーネントファミリ
jakarta.faces.OutcomeTarget
のRenderers
によってレンダリングされるコンポーネントは、そのようなコンポーネントを使用してフローから(別のフローに入らずに)戻るときに、TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME
によって指定されたパラメーターの値としてこの定数を使用する必要があります。- 導入:
- 2.2
- 関連事項:
- 定数フィールド値
メソッドの詳細
getCurrentFlowScope
public abstract MapSE<ObjectSE,ObjectSE> getCurrentFlowScope()
#{flowScope}
Jakarta Expression Language 暗黙オブジェクトをバックアップするMap
を返します。現在アクティブなフローがない場合は、null
を返します。- 戻り値:
- このフロースコープの
Map
。 - 導入:
- 2.2
getFlow
public abstract Flow getFlow(FacesContext context, StringSE definingDocumentId, StringSE id)
引数
definingDocument
のスコープ内で、id
が引数id
と同等であるFlow
を返します。- パラメーター:
context
- 現在のリクエストのFacesContext
。definingDocumentId
- 返されるフローが定義されているドキュメントのアプリケーション固有の識別子。id
-definingDocument
のスコープ内で一意のFlow
の ID。- 戻り値:
- 引数識別子の
Flow
。 - 例外:
NullPointerExceptionSE
- パラメーターのいずれかがnull
の場合- 導入:
- 2.2
addFlow
public abstract void addFlow(FacesContext context, Flow toAdd)
現在のアプリケーションで認識されている
Flow
のコレクションに引数Flow
を追加します。実装はスレッドセーフでなければなりません。- パラメーター:
context
- 現在のリクエストのFacesContext
。toAdd
- 追加するFlow
。- 例外:
NullPointerExceptionSE
- パラメーターのいずれかがnull
の場合IllegalStateExceptionSE
-definingDocument
のスコープ内に引数Flow
と同じid
のフローがすでに存在する場合。IllegalArgumentExceptionSE
- 追加するフローのid
がnull
または空の文字列の場合。IllegalArgumentExceptionSE
-toAdd
のdefiningDocumentId
がnull
の場合。- 導入:
- 2.2
getCurrentFlow
public abstract Flow getCurrentFlow(FacesContext context)
引数
FacesContext
に対して現在アクティブなFlow
を返します。アクティブなフローがない場合は、null
を返します。Flow
は常に正確に 1 つのClientWindow
に関連付ける必要がありますが、ClientWindow
には複数のFlow
が含まれる場合があります。このメソッドを呼び出す前に、引数として
true
を使用してpushReturnMode(jakarta.faces.context.FacesContext)
が呼び出された場合は、実際の現在のフローの代わりにスタック上の先行するフローを返します。先行するフローがない場合はnull
を返します。それ以外の場合は、現在のフローを返します。- パラメーター:
context
- 現在のリクエストのFacesContext
。- 戻り値:
- フローがアクティブでない場合は、現在の
Flow
またはnull
- 例外:
NullPointerExceptionSE
- パラメーターのいずれかがnull
の場合- 導入:
- 2.2
getCurrentFlow
public Flow getCurrentFlow()
FacesContext.getCurrentInstance()
を呼び出してからgetCurrentFlow(jakarta.faces.context.FacesContext)
を呼び出す便利なオーバーロード。- 戻り値:
- フローがアクティブでない場合は、現在の
Flow
またはnull
- 導入:
- 2.2
getLastDisplayedViewId
public abstract StringSE getLastDisplayedViewId(FacesContext context)
getCurrentFlow(jakarta.faces.context.FacesContext)
によって返される現在のフローの最後に表示された viewId を返します。現在のフローがない場合はnull
を返します。- パラメーター:
context
- 現在のリクエストのFacesContext
。- 戻り値:
- 最後に表示された viewId。
- 例外:
NullPointerExceptionSE
-context
がnull
の場合- 導入:
- 2.2
pushReturnMode
public abstract void pushReturnMode(FacesContext context)
リターンノードを処理するときに、ナビゲーションの正しい処理を有効にします。デフォルトの
NavigationHandler
仕様では、フローリターンのナビゲーションルールを処理する前にこのメソッドを呼び出し、その直後にfinally
ブロックからpopReturnMode(jakarta.faces.context.FacesContext)
を呼び出す必要があります。- パラメーター:
context
- 現在のリクエストのFacesContext
。- 例外:
NullPointerExceptionSE
-context
がnull
の場合。- 導入:
- 2.2
popReturnMode
public abstract void popReturnMode(FacesContext context)
リターンノードを処理するときに、ナビゲーションの正しい処理を有効にします。デフォルトの
NavigationHandler
仕様では、finally
ブロックからこのメソッドを呼び出し、フローリターンのコンテキストでナビゲーションルールの処理をすぐに試行する必要があります。- パラメーター:
context
- 現在のリクエストのFacesContext
。- 例外:
NullPointerExceptionSE
-context
がnull
の場合。- 導入:
- 2.2
transition
public abstract void transition(FacesContext context, Flow sourceFlow, Flow targetFlow, FlowCallNode outboundCallNode, StringSE toViewId)
現在のユーザーの
ClientWindow
のフローグラフで遷移を実行します。origin
およびdestination
引数に対応するFlow
インスタンスへの参照を取得します。origin Flow
がdestination Flow
と等しい場合は、何も実行せずにnull
を返します。それ以外の場合、outboundCallNode
引数がnull
でない場合は、送信パラメーターを保存します。説明のために、evaluatedParams は、送信パラメーターの評価された値を格納するデータ構造です。フロースコープをポップする前にこれらの値を評価する必要があります。値は、ターゲットフローに渡す必要があるが、新しいスコープがアクティブになると使用できなくなるスコープインスタンスを参照する可能性があるためです。次のアルゴリズムを使用して、送信パラメーターを保存します。outboundCallNode
のoutboundParameters
プロパティが非 null
かつ空でなく、ターゲットフローのinboundParameters
プロパティが非 null
かつ空でない場合、名前が受信 パラメーターのエントリと一致する送信 パラメーターの各エントリについて、パラメーターの値を評価し、評価した値を対応する名前の evaluatedParams に格納します。それ以外の場合は、evaluatedParams を空と見なします。destination Flow
がorigin Flow
のサブフローである場合は、destination Flow
をフローデータ構造にプッシュし、the destination Flow
を返します。それ以外の場合は、フローデータ構造から現在のFlow
をポップします。destination Flow
がnull
でない場合は、destination Flow
を現在のフローにして、データ構造にプッシュします。evaluatedParams が空でない場合は、各エントリについて、ターゲットフローの受信パラメーターで対応するパラメーターを見つけ、そのsetValue
メソッドを呼び出して、evaluatedParams からの値を渡します。- パラメーター:
context
- 現在のリクエストのFacesContext
。sourceFlow
- 現在のFlow
、またはソースフローがない場合はnull
。targetFlow
- 宛先Flow
、または宛先フローがない場合はnull
。outboundCallNode
- この遷移を引き起こしているフロー呼び出しノード、またはこの遷移がフロー呼び出しによって引き起こされていない場合はnull
。toViewId
- この遷移の結果として表示されるビューの viewId。このパラメーターにより、getLastDisplayedViewId(jakarta.faces.context.FacesContext)
を実装できるようになります。- 例外:
NullPointerExceptionSE
-context
またはtoViewId
がnull
の場合。- 導入:
- 2.2
clientWindowTransition
public abstract void clientWindowTransition(FacesContext context)
コンポーネントファミリ
jakarta.faces.OutcomeTarget
のレンダラーによってレンダリングされたコンポーネントの場合にフロー遷移を許可します。これらの遷移は、そのようなコンポーネントの HTTP GET ベースの性質により、リクエスト処理ライフサイクルの前に発生する必要があります。このメソッドは、ライフサイクルのビューの復元フェーズから呼び出されます。flowId を、
FLOW_ID_REQUEST_PARAM_NAME
の値によって名前が指定されたパラメーターのリクエストパラメーターマップの値とします。toFlowDocumentId を、TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME
の値によって名前が指定されたパラメーターのリクエストパラメーターマップの値とします。toFlowDocumentId がnull
の場合、何も実行せず戻ります。それ以外の場合、sourceFlow をgetCurrentFlow(jakarta.faces.context.FacesContext)
からの戻り値とします。null
値は、現在のフローが存在しないことを示します。これは、このナビゲーションがフローに入ろうとしている場合に当てはまります。flowId がnull
でなく、toFlowDocumentId がNULL_FLOW
の値と等しくない場合、getFlow(jakarta.faces.context.FacesContext, java.lang.String, java.lang.String)
を呼び出して、最後の 2 つの引数としてそれぞれ toFlowDocumentId と flowId を渡した結果を targetFlow とします。結果がnull
以外の場合、sourceFlow でFlow.getFlowCall(jakarta.faces.flow.Flow)
を呼び出した際の戻り値を flowCallNode とし、引数として targetFlow を渡します。それ以外の場合、targetFlow と flowCallNode はnull
のままで、これがフロー戻り値であることを示します。FacesContext.getViewRoot()
を呼び出し、UIViewRoot.getViewId()
を呼び出した際の戻り値を toViewId とします。前のアルゴリズムで収集された引数を渡して、
transition(jakarta.faces.context.FacesContext, jakarta.faces.flow.Flow, jakarta.faces.flow.Flow, jakarta.faces.flow.FlowCallNode, java.lang.String)
を呼び出します。- パラメーター:
context
- 現在のリクエストのFacesContext
。- 例外:
NullPointerExceptionSE
-context
がnull
の場合。- 導入:
- 2.2
isActive
public abstract boolean isActive(FacesContext context, StringSE definingDocument, StringSE id)
引数
definingDocument
およびid
によって参照されるフローが現在アクティブである場合にのみ、true
を返します。- パラメーター:
context
- 現在のリクエストのFacesContext
。definingDocument
- 返されるフローが定義されているドキュメントのアプリケーション固有の識別子。id
-definingDocument
のスコープ内で一意のFlow
の ID。- 戻り値:
- 参照されたフローがアクティブである場合にのみ true
- 例外:
NullPointerExceptionSE
- パラメーターのいずれかがnull
の場合- 導入:
- 2.2