クラス Flow

実装されたすべてのインターフェース:
AnnotatedFlowDefinition

public class Flow extends AnnotatedObject implements FlowDefinition
単一のフロー定義。フロー定義は、ユーザーダイアログまたは会話のブループリントを提供する、再利用可能な自己完結型コントローラーモジュールです。フローは通常、Web アプリケーション内で制御されたナビゲーションを駆動し、状態としてモデル化された一連の手順で実行されるビジネスプロセス / ゴールの達成をユーザーにガイドします。

単純なフロー定義では、アクションを実行してビューを表示することしかできません。より複雑なフロー定義は長期間実行され、一連のリクエストにわたって実行され、多くのパス、アクション、サブフローを呼び出す可能性があります。

特にイントラネットアプリケーションでは、多くの場合「制御されたナビゲーション」があり、ユーザーは自由にやりたいことを実行できず、システムが提供するガイドラインに従って、本質的にトランザクション的なプロセスを完了する必要があります (典型的な例は、ショッピングカートアプリケーションの「チェックアウト」フローです)。これは、フローとしてモデル化するのに適した典型的な使用例です。

構造的には、フローは一連の状態から構成されます。State は、フロー内で動作が実行されるポイントです。たとえば、ビューの表示、アクションの実行、サブフローの生成、フローの終了などです。状態の種類によって、ポリモーフィックな方法で異なる動作が実行されます。

TransitionableState 型には、実行されるとフローを別の状態に移動する 1 つ以上の遷移があります。これらの遷移は、フローを通じてサポートされるパスを定義します。

状態遷移は、イベントの発生によってトリガーされます。イベントとは、フローが応答する必要がある何かの発生です。たとえば、ユーザー入力イベント (「送信」など) やアクション実行結果イベント (「成功」など) などです。フローの状態でイベントが発生すると、そのイベントによって状態遷移が駆動され、次に何をするかが決定されます。

各フローには開始状態が 1 つだけあります。開始状態は、このフロー定義の実行が開始される状態を示す単なるマーカーです。フローに追加された最初の状態が、デフォルトで開始状態になります。

フロー定義には、1 つ以上のフロー例外ハンドラーを含めることができます。FlowExecutionExceptionHandler は、このフローの実行の 1 つの状態で発生する特定の例外 (または例外のセット) に応じてカスタム動作を実行できます。

このクラスのインスタンスは通常、FlowBuilder 実装によって構築されますが、直接インスタンス化することもできます。

このクラスと Spring Web Flow (SWF) エンジンの残りの部分は、他のライブラリへの依存を最小限に抑えて設計されています。Spring Web Flow はスタンドアロンで使用できます。エンジンシステムは、テストやスタンドアロンアプリケーションなど、HTTP サーブレット環境以外でも完全に使用できます。Spring Web Flow のアーキテクチャ上の主な利点の 1 つは、 あらゆる環境で実行できる再利用可能な高レベルのコントローラーモジュールを設計できることです。

メモ: フローはシングルトン定義オブジェクトなので、スレッドセーフである必要があります。フロー定義は、アプリケーションモジュールのすべての動作を定義する Java クラスに類似したものと考えることができます。コア動作は、startresume(RequestControlContext)on eventendhandleException(FlowExecutionException, RequestControlContext) です。各メソッドは、このフローがスレッドセーフな方法で実行状態にアクセスできるようにする request context を受け入れます。フロー実行は、このフロー定義の実行中のインスタンスをモデル化するもので、クラスのインスタンスである java オブジェクトに多少類似しています。

作成者:
Keith Donald, Erwin Vervaet, Colin Sampaleanu, Jeremy Grelle
関連事項:
  • フィールドの詳細

    • logger

      protected final org.apache.commons.logging.Log logger
      ロガーはサブクラスで使用できます。
  • コンストラクターの詳細

    • Flow

      public Flow(StringSE id)
      指定された ID を使用して新しいフロー定義を構築します。ID はすべてのフロー間で一意である必要があります。
      パラメーター:
      id - フロー識別子
  • メソッドの詳細

    • create

      public static Flow create(StringSE id, AttributeMap<?> attributes)
      指定された ID と属性を使用して新しいフローを作成します。
      パラメーター:
      id - フロー ID
      attributes - 属性
      戻り値:
      流れ
    • getId

      public StringSE getId()
      インターフェースからコピーされた説明: FlowDefinition
      このフローの一意の ID を返します。
      次で指定:
      インターフェース FlowDefinitiongetId 
      戻り値:
      フロー ID
    • getStartState

      public StateDefinition getStartState()
      インターフェースからコピーされた説明: FlowDefinition
      このフローの開始点を返します。
      次で指定:
      インターフェース FlowDefinitiongetStartState 
      戻り値:
      開始状態
    • getState

      public StateDefinition getState(StringSE stateId)
      インターフェースからコピーされた説明: FlowDefinition
      指定された ID を持つ状態定義を返します。
      次で指定:
      インターフェース FlowDefinitiongetState 
      パラメーター:
      stateId - 状態 ID
      戻り値:
      状態の定義
    • getPossibleOutcomes

      public StringSE[] getPossibleOutcomes()
      インターフェースからコピーされた説明: FlowDefinition
      このフローが到達できる可能性のある結果を返します。
      次で指定:
      インターフェース FlowDefinitiongetPossibleOutcomes 
      戻り値:
      起こりうる結果
    • getClassLoader

      public ClassLoaderSE getClassLoader()
      インターフェースからコピーされた説明: FlowDefinition
      このフロー定義でクラスをロードするために使用するクラスローダーを返します。
      次で指定:
      インターフェース FlowDefinitiongetClassLoader 
      戻り値:
      クラスローダー
    • getApplicationContext

      public org.springframework.context.ApplicationContext getApplicationContext()
      インターフェースからコピーされた説明: FlowDefinition
      このフロー定義で使用されるアプリケーションオブジェクトとサービスをホストするアプリケーションコンテキストへの参照を返します。
      次で指定:
      インターフェース FlowDefinitiongetApplicationContext 
      戻り値:
      アプリケーションコンテキスト
    • inDevelopment

      public boolean inDevelopment()
      インターフェースからコピーされた説明: FlowDefinition
      このフロー定義が現在開発中(開発モードで実行中)の場合は true を返します。
      次で指定:
      インターフェース FlowDefinitioninDevelopment 
      戻り値:
      開発旗
    • add

      protected void add(State state) throws IllegalArgumentExceptionSE
      指定された状態定義をこのフロー定義に追加します。このメソッドは、FlowBuilder 呼び出しの一部として状態構築中に (特権を持つ) 状態定義クラス自体によって呼び出されるため、保護されているとマークされています。
      パラメーター:
      state - 追加する状態
      例外:
      IllegalArgumentExceptionSE - 状態をフローに追加できない場合。たとえば、別の状態が指定された ID と同じ ID を共有している場合や、指定された状態がすでに別のフローに属している場合などです。
    • getStateCount

      public int getStateCount()
      このフロー内で定義されている状態の数を返します。
      戻り値:
      状態の数
    • containsState

      public boolean containsState(StringSE stateId)
      指定された ID を持つ状態がこのフローに存在しますか ?
      パラメーター:
      stateId - 状態 ID
      戻り値
      はいの場合は true、そうでない場合は false
    • setStartState

      public void setStartState(StringSE stateId) throws IllegalArgumentExceptionSE
      このフローの開始状態を、指定された stateId の状態に設定します。指定された stateId によって状態が存在している必要があります。
      パラメーター:
      stateId - 新しい開始状態の ID
      例外:
      IllegalArgumentExceptionSE - 指定した ID を持つ状態が存在しない場合
    • setStartState

      public void setStartState(State state) throws IllegalArgumentExceptionSE
      このフローの開始状態を指定された状態に設定します。任意の状態を開始状態にすることができます。
      パラメーター:
      state - 新しい開始状態
      例外:
      IllegalArgumentExceptionSE - 指定された状態はこのフローに追加されていません
    • getTransitionableState

      public TransitionableState getTransitionableState(StringSE stateId) throws IllegalArgumentExceptionSE, ClassCastExceptionSE
      指定された stateId を持つ TransitionableState を返します。
      パラメーター:
      stateId - 検索する状態の ID
      戻り値:
      遷移可能な状態
      例外:
      IllegalArgumentExceptionSE - 特定された状態が見つからない場合
      ClassCastExceptionSE - 識別された状態が遷移可能でない場合
    • getStateInstance

      public State getStateInstance(StringSE stateId) throws IllegalArgumentExceptionSE
      このフローの識別された状態インスタンスを検索します。
      パラメーター:
      stateId - 状態 ID
      戻り値:
      状態
      例外:
      IllegalArgumentExceptionSE - 特定された状態が見つからない場合
    • getStateIds

      public StringSE[] getStateIds()
      このフロー定義に関連付けられた状態定義の文字列 ids の順序付けられた配列を返す便利なアクセサー。
      戻り値:
      状態 ID
    • addVariable

      public void addVariable(FlowVariable variable)
      フロー変数を追加します。
      パラメーター:
      variable - 変数
    • addVariables

      public void addVariables(FlowVariable... variables)
      フロー変数を追加します。
      パラメーター:
      variables - 変数
    • getVariable

      public FlowVariable getVariable(StringSE name)
      指定された名前のフロー変数を返します。
      パラメーター:
      name - 変数の名前
    • getVariables

      public FlowVariable[] getVariables()
      フロー変数を返します。
    • getInputMapper

      public Mapper getInputMapper()
      設定されたフロー入力マッパーを返します。存在しない場合は null を返します。
      戻り値:
      入力マッパー
    • setInputMapper

      public void setInputMapper(Mapper inputMapper)
      フロー入力属性をマップするようにマッパーを設定します。
      パラメーター:
      inputMapper - 入力マッパー
    • getStartActionList

      public ActionList getStartActionList()
      フローの実行が開始されたときに、このフローによって実行されるアクションのリストを返します。返されるリストは変更可能です。
      戻り値:
      開始アクションリスト
    • getEndActionList

      public ActionList getEndActionList()
      フローの実行が終了したときに、このフローによって実行されたアクションのリストを返します。返されるリストは変更可能です。
      戻り値:
      終了アクションリスト
    • getOutputMapper

      public Mapper getOutputMapper()
      設定されたフロー出力マッパーを返します。存在しない場合は null を返します。
      戻り値:
      出力マッパー
    • setOutputMapper

      public void setOutputMapper(Mapper outputMapper)
      フロー出力属性をマップするようにマッパーを設定します。
      パラメーター:
      outputMapper - 出力マッパー
    • getExceptionHandlerSet

      public FlowExecutionExceptionHandlerSet getExceptionHandlerSet()
      例外ハンドラーのセットを返します。これにより、フロー実行中にスローされた例外の処理方法を操作できます。例外ハンドラーは、実行時に例外が発生したときに呼び出され、カスタム例外処理ロジックを実行したり、表示するエラービューを選択したりできます。フローレベルで接続された例外ハンドラーは、状態レベルで処理されない例外を処理できます。
      戻り値:
      例外ハンドラーセット
    • getGlobalTransitionSet

      public TransitionSet getGlobalTransitionSet()
      状態レベルの遷移が一致しない場合は、このフローで実行できる遷移のセットを返します。返されるセットは変更可能です。
      戻り値:
      グローバル遷移セット
    • getGlobalTransition

      public TransitionDefinition getGlobalTransition(StringSE eventId)
      指定された ID のイベントに一致する遷移を返します。
      パラメーター:
      eventId - イベント ID
      戻り値:
      一致する遷移。一致するものが見つからない場合は null。
    • setApplicationContext

      public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
      このフローに必要なアプリケーションオブジェクトをホストするアプリケーションコンテキストへの参照を設定します。
      パラメーター:
      applicationContext - アプリケーションコンテキスト
    • equals

      public boolean equals(ObjectSE o)
      オーバーライド:
      クラス ObjectSEequalsSE 
    • hashCode

      public int hashCode()
      オーバーライド:
      クラス ObjectSEhashCode 
    • start

      public void start(RequestControlContext context, MutableAttributeMap<?> input) throws FlowExecutionException
      このフローの開始状態で新しいセッションを開始します。これは次のようになります。
      1. フロースコープに登録されているすべてのフロー変数 (addVariable(FlowVariable)) を作成 (設定) します。
      2. 提供された入力データをフローにマップします。通常、データは登録された入力マッパー (setInputMapper(Mapper)) を使用してフロースコープにマップされます。
      3. 登録されているすべての開始アクション(getStartActionList())を実行します。
      4. 設定された開始状態を入力します ( setStartState(State) )
      パラメーター:
      context - フロー実行制御コンテキスト
      input - セッションへの適切な入力
      例外:
      FlowExecutionException - フローの開始時に例外が発生したとき
    • resume

      public void resume(RequestControlContext context) throws FlowExecutionException
      このフローの一時停止されたセッションを現在のビュー状態で再開します。
      パラメーター:
      context - フロー実行制御コンテキスト
      例外:
      FlowExecutionException - 再開操作中に例外が発生した場合
    • handleEvent

      public boolean handleEvent(RequestControlContext context)
      このフローのアクティブセッションに対して発生した最後のイベントを処理します。
      パラメーター:
      context - フロー実行制御コンテキスト
    • end

      public void end(RequestControlContext context, StringSE outcome, MutableAttributeMap<?> output) throws FlowExecutionException
      このフロー定義に、自身の実行セッションが終了したことを通知します。その結果、フローは次の処理を実行します。
      1. 登録されているすべての終了アクション(getEndActionList())を実行します。
      2. 登録された出力マッパー (setOutputMapper(Mapper)) を使用して、フロー実行制御コンテキストで使用可能なデータを、提供された出力マップ内にマップします。
      パラメーター:
      context - フロー実行制御コンテキスト
      outcome - セッションによって返される論理フローの結果。通常は終了状態の ID です
      output - このメソッドによって変更できるセッションによって生成された初期出力
      例外:
      FlowExecutionException - 例外が発生してこのフローが終了すると
    • destroy

      public void destroy()
      インターフェースからコピーされた説明: FlowDefinition
      このフロー定義を破棄し、すべてのリソースを解放します。フローが破棄された後は、再度開始することはできません。
      次で指定:
      インターフェース FlowDefinitiondestroy 
    • handleException

      public boolean handleException(FlowExecutionException exception, RequestControlContext context) throws FlowExecutionException
      このフローの実行中に発生した例外を処理します。
      パラメーター:
      exception - 発生した例外
      context - フロー実行制御コンテキスト
      例外:
      FlowExecutionException
    • restoreVariables

      public void restoreVariables(RequestContext context)
    • toString

      public StringSE toString()
      オーバーライド:
      クラス ObjectSEtoString