インターフェース Action
- すべての既知の実装クラス:
AbstractAction
、AnnotatedAction
、CompositeAction
、EvaluateAction
、ExternalRedirectAction
、FlowDefinitionRedirectAction
、FormAction
、MockAction
、MultiAction
、RenderAction
、SetAction
、ViewFactoryActionAdapter
アクションは通常、ビジネス操作を実行するためにアプリケーション (またはサービス) 層に委譲します。アクションは、レスポンスのレンダリングをサポートするためにデータを取得することがよくあります。アクションは、SWF Web 層と中間層のビジネスロジック層の間の橋渡しとして機能します。
アクションの実行が完了すると、その実行の結果 (「成功」、「エラー」、「はい」、「いいえ」、"tryAgain" など) を示す結果イベントが通知されます。フローが応答できる論理的な結果を提供することに加えて、結果イベントには、戻り値「成功」やエラーコード「エラー」などのペイロードが関連付けられている場合があります。結果イベントは通常、呼び出しフローの現在の状態からの状態遷移の根拠として使用されます。
アクションの実装は、多くの場合、アプリケーションスコープのシングルトンであり、Web 層の Spring アプリケーションコンテキストによってインスタンス化および管理され、Spring の外部化された設定と依存性注入機能 (制御の反転 [IoC] の一種) を活用します。アクションは、会話状態をインスタンス変数として保存するステートフルプロトタイプである場合もあります。アクションインスタンス定義は、特定のフロー定義にローカルスコープされる場合もあります。(ルート XML フロー定義要素の "import" 要素 の使用を参照してください。)
メモ: アクションは、スタンドアロンテスト環境で使用するために直接インスタンス化でき、単純な POJO であるため、モックまたはスタブを使用してパラメーター化できます。アクションプロキシは、Spring Web Flow API に依存しない POJO ビジネス操作に委譲するために実行時に生成することもできます。
メモ: アクションがアプリケーションスコープで管理されるシングルトンである場合は、呼び出し元固有の状態を安全でない方法で保存したり変更したりしないように注意してください。アクション execute(RequestContext)
メソッドは、呼び出しごとに独立して実行されるスレッドで実行されるため、ローカルデータまたは内部のスレッドセーフなサービスのみを処理するようにしてください。
メモ: アクションは、Spring MVC コントローラーや Struts アクションのようなコントローラーではありません。フローアクションはコマンドです。このようなコマンドはビューを選択せず、任意の動作ロジックを実行してから、論理的な実行結果を返します。アクションを呼び出すフローは、実行結果に応答して次に何を行うかを決定するロールを担います。Spring Web Flow では、フローがコントローラーです。
- 作成者:
- Keith Donald, Erwin Vervaet
メソッドのサマリー
メソッドの詳細
execute
このアクションを実行します。アクションの実行は、アクティブなフロー実行に関連付けられたリクエストのコンテキストで発生します。アクションの呼び出しは、通常、フロー定義の実行を実行するフロー内の状態によって本番環境でトリガーされます。アクション実行の結果、つまり論理的な結果イベントは、呼び出し状態から遷移するための根拠として使用できます。
メモ: このメソッドの
RequestContext
引数は、現在実行中のスレッドのコンテキストでアクティブなフロー実行に関するデータへのアクセスを提供します。特に、これにより、このアクションは他のアクションによって設定されたdata
にアクセスしたり、特定のスコープ内で公開する独自の属性を設定したりできるようになります。アクションと属性スコープ型の使用に関する注意事項:
request scope
に設定された属性は、現在実行中のリクエストの有効期間中のみ存在します。flash scope
で設定された属性は、ビューのレンダリングが完了するまで存在します。その時間には、現在のリクエストと、ビューのレンダリングが完了するために必要なリダイレクトが含まれます。flow scope
で設定された属性はフローセッションの存続期間中存在し、フローセッションが終了すると自動的にクリーンアップされます。conversation scope
で設定された属性は、フロー実行全体の存続期間中存在し、ユーザーとの単一の論理的な「会話」を表します。
通常、任意のスコープ内に存在するすべての属性は、ビュー状態などの「インタラクティブ」な状態型が入力されたときに、ビューによるアクセスのためにモデル内で公開されます。
メモ: フロースコープは、一般的には汎用キャッシュとして使用されるべきではなく、このアクションが関与するフローの他の状態でローカルに必要なデータのコンテキストとして使用されるべきです。例: オブジェクトの大スコープなコレクション (検索結果ビューをサポートするために返されるものなど) をフロースコープに詰め込むのは不適切です。代わりに、そのような結果コレクションをリクエストスコープに配置し、その結果を表示するたびにこのアクションを再度実行してください。SWF の外部で管理される第 2 レベルのキャッシュは、より一般的なキャッシュソリューションです。
メモ: フロースコープ属性は直列化の対象となるため、
Serializable
である必要があります。- パラメーター:
context
- アクション実行コンテキスト。scope type
のデータにアクセスして設定し、他のフローコンテキスト情報を取得するためのものです。(例: リクエストコンテキスト属性とフロー実行コンテキスト情報)- 戻り値:
- 呼び出しフローの遷移の根拠として使用される論理的な結果 (例: 「成功」、「エラー」、「はい」、「いいえ」、*...)
- 例外:
ExceptionSE
- アクション実行中に、チェック済みまたはチェックされていない例外が発生しました。 回復可能な例外はすべてこのメソッド内でキャッチされ、適切な結果が返されるか、呼び出しフロー実行の現在の状態によって処理される必要があることに注意してください。