action要素の属性には、以下の値が設定できる
name: マッピング名
class: 呼び出されるクラス。省略するとcom.opensymphony.xwork2.ActionSupportクラスが呼ばれる。
method: 呼び出されるメソッド。省略するとexecute()メソッドが呼ばれる。
converter: ???

サンプル(基本パターン)

<package name="example" namespace="/hoge" extends="struts-default">
<action name="aaa"> - (1)
<result>showcase.jsp</result>
</action>
<action name="bbb" class="example.FooAction"> - (2)
<result>/example/Foo.jsp</result>
</action>
<action name="ccc" class="example.BarAction" method="insert"> - (3)
<result>/example/Foo.jsp</result>
</action>
<action name="ddd" class="example.BarAction" method="update"> - (4)
<result>/example/Foo.jsp</result>
</action>
<package/>


コンテキスト名はstruts2,マッピングされる拡張子をactionとすると、
  • http://struts2/hoge/aaa.actionで(1)にマッピングされる。class、methodが省略されているのでcom.opensymphony.xwork2.ActionSupport.execute()が呼ばれる。
  • http://struts2/hoge/bbb.actionで(2)にマッピングされる。example.FooAction.execute()が呼ばれる
  • http://struts2/hoge/ccc.actionで(3)にマッピングされる。example.BarAction.insert()が呼ばれる
  • http://struts2/hoge/ccc.actionで(4)にマッピングされる。example.BarAction.update()が呼ばれる


ワイルドカードを使ったマッピングを行うこともできる。

サンプル(ワイルドカード使用パターン)
<package name="example" namespace="/hoge" extends="struts-default">
<action name="hoo_*" class="example.BarAction" method="{1}"> - (1)
<result>/example/Foo.jsp</result>
</action>
<action name="*_bar" class="example.Hoge{1}Action""> - (2)
<result>showcase.jsp</result>
</action>
<package/>
  • http://struts2/hoge/hoo_insert.actionで(1)にマッピングされる。example.BarAction.insert()が呼び出される。
  • http://struts2/hoge/hoo_bar.actionで(1)にマッピングされる。example.BarAction.update()が呼び出される。
  • http://struts2/hoge/hoge_insert.actionで(2)にマッピングされる。example.HogeinsertAction.execute()が呼び出される。
  • http://struts2/hoge/hoge_update.actionで()にマッピングされる。example.HogeupdaterAction.execute()が呼び出される。
(1)は基本パターンの(3)と(4)を1つにまとめて書く例になっている。


Springと一緒に使用して、Actionをspringに管理させる場合は以下のようになる。
サンプル(ActionクラスをSpringで管理パターン)
<package name="example" namespace="/hoge" extends="struts-default">
<action name="hoge" class="hogehoge">
<result>/example/Foo.jsp</result>
</action>

これはspringで使用するapplicationContext.xmlの一部

<bean id="hogehoge" class="example.HogeAction" scope="request" ></bean>

classで指定しているhogehogeがhogehoge.javaではなく、springで管理しいるbeanのidとマッピングされる。springで管理する際にはscope要素に気をつける。springはデフォルトスコープがsingletonだが、struts2のActionクラスはステートフルなクラスなのでスコープがsingletonということはほぼない。大抵はrequestでよいと思われる。Actionクラスをセッションで管理したければsessionにすればよい。

0 コメント: