InterceptorはActionの実行前や実行後に処理を差し込むことができる。
Actionに対してinterceptorを追加、変更、削除したい場合はstruts.xmlを修正するだけで済む。
com.opensymphony.xwork2.interceptor.Interceptorやcom.opensymphony.xwork2.interceptor.AbstractInterceptorを継承して自分でInterceptorを作ることもできるが、大抵のものはFrameworkで用意されているのでそれを使用するとよい。(struts-default.xmlのinterceptor要素でFrameworkで用意されているinterceptorが定義されている。

サンプル1


<package name="example" namespace="/hogehoge" extends="struts-default">

<action name="Foo" class="example.Foo" method="insert">
   <interceptor-ref name="defaultStack"/>
<result>/example/Foo.jsp</result>
</action>

<action name="Bar" class="example.Bar" method="update">
   <interceptor-ref name="defaultStack"/>
<result>/example/Foo.jsp</result>
</action>
<package/>

example.Foo.insert(),example.Bar.update()が実行される前にdefaultStackというinterceptorが実行される。interceptor-refのname属性は1つのinterceptorにつけられた名前、または複数のinterceptorをひとまとめにしたものに名前をつけたもになている。struts-default.xmlで確認するとわかるが、上記のdefaultStackというinterceptorは複数のinterceptorを1まとめにして名前をつけたものになっている。
また、上記のようにpackage要素内それぞれのactionで同じinterceptorを使うのであれば下記のようにdefault-interceptor-refを使った書き方もできる。


サンプル2

<package name="example" namespace="/hogehoge" extends="struts-default">
<default-interceptor-ref name="defaultStack"/>

<action name="Foo" class="example.Foo" method="insert">
<result>/example/Foo.jsp</result>
</action>

<action name="Bar" class="example.Bar" method="update">
<result>/example/Foo.jsp</result>
</action>
<package/>



自分で作成したinterceptorやstruts-default.xmlに記載してある方法以外でひとまとめにしたものを使用したい場合は下記のように定義をすればよい

サンプル3

<package name="example" namespace="/hogehoge" extends="struts-default">
<interceptors> - (1)
<interceptor name="hogehoge" class="example.HogeHogeInterceptor"> - (2)

<interceptor-stack name="defaultStackHogeHoge"> - (3)
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="hogehoge"/>
</interceptor-stack>
<interceptors>

<action name="Foo" class="example.Foo" method="insert">
<interceptor-ref name="hogeHoge"/>
<result>/example/Foo.jsp</result>
</action>

<action name="Bar" class="example.Bar" method="update">
<interceptor-ref name="defaultStackHogeHoge"/>
<result>/example/Foo.jsp</result>
</action>
<package/>

定義の仕方は(1)のようにinterceptors要素を定義し、子要素として、新たなinterceptorの定義は(2)のように、新たなinterceptorをまとめたものの定義は(3)のように記載する。

0 コメント: