DispatchAction

普段は、イベントによってそれぞれのイベントにあったアクションフォームやアクションのクラスを使いますが、関連したアクションがいくつかある場合は、DispatchActionを使ってひとつのアクションにまとめることができます。 例えば、create,delete,updateなどのアクションは、関連したイベントとして、同じアクションで処理できます。
DispatchActionは、struts-configファイルのaction-mappingで定義されたパラメータを使うことによって、DispatchActionクラスの中のどのメソッドを呼び出すかを決定します。
例えば:


<action path="/recordAction"
type="app.RecordDispatchAction"
name="recordForm"
scope="request"
validate="true"
input="record.jsp"
parameter="methodKey"> ←methodKeyという名前でパラメータの受渡しをします。


アクションのクラスは、DispatchActionのサブクラスにそれぞれ必要なdispatchメソッドを作成します。

...
public class RecordDispatchAction extends DispatchAction {
public ActionForward create (
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {...}

public ActionForward delete (
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {...}

...
}

(注) executeメソッドは他のメソッドを選択するのに使われるため、ここではオーバーライドしないこと。
そして、

  • /do/recordAction?methodKey="create"
  • /do/recordAction?methodKey="delete"

と、このようなURLを作成することによって、DispatchActionのexecuteメソッドが正しいメソッドを選択し、呼び出します。