使い方
設定
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>