1. 当没有定义result中的type时,会默认使用webwork-default.xml中的type。
2. 可以为同一个action类定义不同的名字,以便为不同的名字配置不同的拦截器。
3. 当使用同一个类充当多个action时,需要在配置文件中定义要执行的方法,否则会默认执行execute方法(利用反射机制),如:
<action name="editJob" class="org.quartz.ui.web.action.job.CreateJob" method="edit"> <result name="input" type="velocity">/WEB-INF/vm/createJob.vm</result> <result name="success" type="velocity">/WEB-INF/vm/createJob.vm</result> <result name="error" type="velocity">/WEB-INF/vm/editDefinition.vm</result> </action> 注意其中的method=”edit” |
Ps:我觉得这点比struts要好一点,最大限度做到代码重用。例如一般的CRUD操作可以放在一个文件中完成。
同样可以使用另外一种机制调用action中的指定名称的方法,例如上面的配置可以使用
http://localhost:port/context/editJob!edit.action这样的url连接去调用CreateJobAction中的
edit()方法,只不过这种调用方式安全性较差。
4. 用户自定义参数
可以在配置文件中为某个action自定义参数,如:
<action name="service" class="com.example.WebServiceAction"> <result name="success">/success.jsp</result> <param name="url">http://somesite.com/service.wsdl</param> <param name="timeout">30</param> </action> |
同样需要在WebServiceAction中为url和timeout两个变量设置javabean格式的set方法,如public void setUrl()…,这样,在action执行时会自动将配置文件中的value映射到action中的变量最中。
5. 可以在webwork.xml中定义global-result,这样在action-mapping中如果没有定义result type则会默认使用global-result中的type。P79
6. 当需要两个或多个interceptors的时候,可以将这些interceptors加入到一个stack,这样在action-mapping中直接调用stack,即可实现多个拦截器,如:
<package name="default" extends="webwork-default"> <interceptors> <interceptor name="timer" class=".."/> <interceptor name="logger" class=".."/> <interceptor-stack name="myStack"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> </interceptor-stack> </interceptors> <action name="login" class="org.hibernate.auction.web.actions.users.Login"> <interceptor-ref name="myStack"/> <result name="input">login.jsp</result> <result name="success" type="redirect">/secure/dashboard.action</result> </action> </package> |
7. 当在配置文件中指定了默认的interceptors-stack时,如果在某个action-mapping中另外定义了一个interceptor-ref时,则在调用该action时,只会调用action-mapping中的interceptor,而不会再去调用default-interceptor-ref。这两个interceptors不能累加使用。