使い方
設定
diconファイル
diconファイルにS2ObjectFactoryを設定します。 autoRegistプロパティをtrueにすると、コンテナに登録されていないコンポーネントが要求された際に、自動でコンテナに登録します(デフォルトはfalse)
<?xml version="1.0"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components23.dtd">
<components>
<component class="org.seasar.xwork.S2ObjectFactory">
<initMethod>@com.opensymphony.xwork.ObjectFactory@setObjectFactory(#self)</initMethod>
<property name="autoRegist">false</property>
</component>
</components>
バージョン0.5からは上記の内容がs2xwork.diconに書かれているため、以下のような記述でも大丈夫です。
<?xml version="1.0"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components23.dtd">
<components>
<include path="s2xwork.dicon" />
</components>
web.xml
web.xmlに以下のコンポーネントを設定します。
- org.seasar.framework.container.filter.S2ContainerFilter
- com.opensymphony.webwork.dispatcher.FilterDispatcher
- org.seasar.framework.container.servlet.S2ContainerServlet
<?xml version="1.0"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <context-param> <param-name>configPath</param-name> <param-value>app.dicon</param-value> </context-param> <filter> <filter-name>s2filter</filter-name> <filter-class> org.seasar.framework.container.filter.S2ContainerFilter </filter-class> </filter> <filter> <filter-name>webwork</filter-name> <filter-class> com.opensymphony.webwork.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>s2filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>webwork</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>s2servlet</servlet-name> <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class> <init-param> <param-name>configPath</param-name> <param-value>app.dicon</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>s2servlet</servlet-name> <url-pattern>/s2servlet</url-pattern> </servlet-mapping> </web-app>
その他の機能
ValueStack経由でSeasar2のコンポーネントにアクセスする
S2CompontntInterceptorを使えば、ValueStack経由でSeasar2のコンポーネントにアクセス出来るようになります。これによりリクエストパラメータを直接Seasar2内のDtoにセットしたり、画面などのResultからSeasar2の2コンポーネントにアクセス出来るようになります。
diconファイル
S2CompontntInterceptorをdiconファイルに追加します。
<component class="org.seasar.xwork.component.S2ComponentInterceptor" />
バージョン0.5からは上記の内容がs2xwork.diconに書かれているため、以下のような記述でも大丈夫です。
<?xml version="1.0"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components23.dtd">
<components>
<include path="s2xwork.dicon" />
</components>
xwork.xml
interceptor要素でorg.seasar.xwork.component.S2ComponentInterceptorを定義して、interceptor-ref要素でアクションに設定します。 以下の例はwebwork-default.xmlのdefaultStackに追加した場合の例です。
<?xml version="1.0"?>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default">
<interceptors>
<interceptor name="s2component"
class="org.seasar.xwork.component.S2ComponentInterceptor" />
<interceptor-stack name="s2componentStack">
<interceptor-ref name="exception" />
<interceptor-ref name="alias" />
<interceptor-ref name="servlet-config" />
<interceptor-ref name="prepare" />
<interceptor-ref name="i18n" />
<interceptor-ref name="chain" />
<interceptor-ref name="s2component" />
<interceptor-ref name="model-driven" />
<interceptor-ref name="fileUpload" />
<interceptor-ref name="static-params" />
<interceptor-ref name="params" />
<interceptor-ref name="conversionError" />
<interceptor-ref name="validation">
<param name="excludeMethods">
input,back,cancel,browse
</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">
input,back,cancel,browse
</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="add"
class="org.seasar.xwork.example.webwork.AddAction">
<interceptor-ref name="s2componentStack" />
<result name="success" type="velocity">add_success.vm</result>
</action>
</package>
</xwork>
