クラス FlowHandler
- java.lang.ObjectSE
-
- jakarta.faces.flow.FlowHandler
public abstract class FlowHandler extends ObjectSE
FlowHandler は、ランタイムがフェイスフロー機能と対話できるようにする主要なエントリポイントです。
NavigationHandlerは、フローに関連するナビゲーション上の決定を行う必要がある場合にこのクラスを使用します。フェイスフロー機能は、ClientWindow機能と CDI に完全に依存しています。フローの定義
実装は、アプリケーション構成リソースの XML スキーマ定義で指定されている
<flow-definition>要素を使用するか、FlowBuilderAPI を使用して、フェースフローの定義をサポートする必要があります。フローを定義する追加の手段は、FlowHandlerFactoryを装飾することによって提供される場合があります。フローの管理
このクラスのシングルトンインスタンスはスレッドセーフである必要があるため、ユーザーごとの状態を格納してはなりません。ただし、フローはユーザーごとにトラバースされるため、現在の
ClientWindowに関連付ける必要があります。さらに、フローはネストされる場合があります。これらの要件は、スタックのようなランタイムデータ構造でフローを管理し、ユーザーごとに保存され、ClientWindowに関連付けられることを強くお勧めします。フローインスタンスは不変ですが、フロースタックはユーザーごとであるため、実装では、フロースコープのデータ(FlowScopedとして宣言されたマネージド Bean およびgetCurrentFlowScope()によって返されるMapに格納されたデータ)を完全に再入可能にする必要があります。例: A と B の 2 つのフローがあり、それぞれが 1 つのFlowScopedBeanMyBeanAと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 は、参照されると、指定されたスコープへのユーザーエージェントのエントリの後に遅延して作成され、ユーザーエージェントがフローを離れるときにガベージコレクションに使用できるようにする必要があります。flowScopeJakarta Expression Language 暗黙オブジェクトは、「現在の」勾配に値を格納するためにも使用できます。このスコープに格納されている値は、ユーザーエージェントがフローを離れるときにガベージコレクションに使用できるようにする必要があります。- 導入:
- 2.2
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static StringSEFLOW_ID_REQUEST_PARAM_NAMEコンポーネントファミリjakarta.faces.OutcomeTargetのRenderersによってレンダリングされるコンポーネントは、この定数を、このコンポーネントが入力されるフローのフロー ID を表すパラメーターのパラメーター名として使用する必要があります。static StringSENULL_FLOWコンポーネントファミリjakarta.faces.OutcomeTargetのRenderersによってレンダリングされるコンポーネントは、そのようなコンポーネントを使用してフローから(別のフローに入らずに)戻るときに、TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAMEによって指定されたパラメーターの値としてこの定数を使用する必要があります。static StringSETO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAMEコンポーネントファミリjakarta.faces.OutcomeTargetのRenderersによってレンダリングされるコンポーネントは、この定数を、このコンポーネントが入力されるフローの定義ドキュメント ID を表すパラメーターのパラメーター名として使用する必要があります。
コンストラクターの概要
コンストラクター コンストラクター 説明 FlowHandler()
方法の概要
すべてのメソッド インスタンスメソッド 抽象メソッド 具象メソッド 修飾子と型 メソッド 説明 abstract voidaddFlow(FacesContext context, Flow toAdd)現在のアプリケーションで認識されているFlowのコレクションに引数Flowを追加します。abstract voidclientWindowTransition(FacesContext context)コンポーネントファミリjakarta.faces.OutcomeTargetのレンダラーによってレンダリングされたコンポーネントの場合にフロー遷移を許可します。FlowgetCurrentFlow()FacesContext.getCurrentInstance()を呼び出してからgetCurrentFlow(jakarta.faces.context.FacesContext)を呼び出す便利なオーバーロード。abstract FlowgetCurrentFlow(FacesContext context)abstract MapSE<ObjectSE,ObjectSE>getCurrentFlowScope()#{flowScope}Jakarta Expression Language 暗黙オブジェクトをバックアップするMapを返します。現在アクティブなフローがない場合は、nullを返します。abstract FlowgetFlow(FacesContext context, StringSE definingDocumentId, StringSE id)abstract StringSEgetLastDisplayedViewId(FacesContext context)getCurrentFlow(jakarta.faces.context.FacesContext)によって返される現在のフローの最後に表示された viewId を返します。現在のフローがない場合はnullを返します。abstract booleanisActive(FacesContext context, StringSE definingDocument, StringSE id)引数definingDocumentおよびidによって参照されるフローが現在アクティブである場合にのみ、trueを返します。abstract voidpopReturnMode(FacesContext context)リターンノードを処理するときに、ナビゲーションの正しい処理を有効にします。abstract voidpushReturnMode(FacesContext context)リターンノードを処理するときに、ナビゲーションの正しい処理を有効にします。abstract voidtransition(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