Action Chaining vs. Action Relay

Action Chainingとは、あるアクションから別のアクションにフォワードすることを言うわけだが、デザイン的によくないとされている。
Action Chainingの例:


<action path="/someAction"
type="actions.SomeAction"
name="someForm"
scope="request">
<forward name="nextAction" path="nextAction.do" />
</action>
一つのプロセスを2つ以上のアクションにまたいで処理するということは、リクエスト/レスポンスを2つ以上のアクションにまたぐことになる。 アクションを再利用したい目的でAction Chainingを使うデベロッパがいるが、これではアクションがAPIのようになってしまう。 こうなったらベースアクションのヘルパーメソッドの出番だ。 ベースアクションを使えば、HTTPレイヤーを行き来することなくコードの再利用ができる。
対してOKとされるのがActionリレーだ。 これも言ってみればAction Chainingのことなのだが、違うのは、2つ以上のアクションをまたいでプロセスを処理するのではないと言うことだ。 最初のアクションを"コントローラ"として利用し、次のアクションでプロセスを行うのだ。 例えばよく使われるテクニックが、最初のアクションでlookupを行い次のアクションを決定、フォワード、そして次のアクションで必要な処理をする。
注意しなければいけないのが、次のアクションにフォワードした時、フォワードされたリクエストはクライアントからの新しいリクエストとみなされる。 ということは、フォームビーンはリセットされ、新しく作られ、バリデートされることになるのだ。 最初に送られたフォームビーンのプロパティは消えてしまうので、それなりの処理がいる。