Struts2 in action读书笔记(4)

第四章 Adding workflow with interceptor(下)
16. 拦截器只能通过XML文件来配置,不支持Java annotations方式。
17. 在struts.xml类型的文件声明中,interceptors包含一个package中所有的拦截器和拦截器栈
例如struts-default.xml文件中:
<interceptors>
……
    <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
    <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>
    <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>
……
    <interceptor-stack name="defaultStack">
        <interceptor-ref name="exception"/>
……
        <interceptor-ref name="modelDriven"/>
    	<interceptor-ref name="fileUpload"/>
    	<interceptor-ref name="checkbox"/>
        <interceptor-ref name="staticParams"/>
        <interceptor-ref name="params">
            <param name="excludeParams">dojo\..*</param>
        </interceptor-ref>
……
        <interceptor-ref name="workflow">
            <param name="excludeMethods">input,back,cancel,browse</param>
        </interceptor-ref>
    </interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack"/>

interceptor用于描述一个拦截器,仅仅是将拦截器名同class对应起来,并不和任何action相结合
interceptor-stack和interceptorref用于定义拦截器栈
default-interceptor-ref用于指定一个package默认的拦截器(栈)
18. 通常情况下,自己定义的actions所在的package通常继承自struts-default.xml,因此也会默认继承defaultStack拦截器栈
可以根据自己的需要修改action的参数,加入需要的拦截器如下所示:
<action name="MyAction" class="org.actions.myactions.MyAction">
	<interceptor-ref name="timer"/>
	<interceptor-ref name="logger"/>
	<interceptor-ref name="defaultStack"/>
	<result>Success.jsp</result>
</action>

当然timer和logger拦截器并没有做什么工作,一般需要在最后加上defaultStack拦截器栈或者自己定义的其他拦截器栈,例如缺少了params拦截器,request中的数据都无法保存到action中,更不要说其他工作了
19. 设置拦截器的参数,例如defaultStack拦截器栈中的workflow拦截器
<interceptor-ref name="workflow">
    <param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>

覆盖拦截器的参数,例如覆盖defaultStack拦截器栈中的workflow拦截器的参数
<action name="YourAction" class="org.actions.youractions.YourAction">
    <interceptor-ref name="defaultStack">
    <param name="workflow.excludeMethods">doSomething</param>
    </interceptor-ref>
    <result>Success.jsp</result>
</action>

20. 实现自己的拦截器通常需要继承AbstractInterceptor或者实现Interceptor
21. SessionAware接口
Actions that want access to the user's HTTP session should implement this interface.
接口包含的方法
/**
 * Sets the Map of session attributes in the implementing class.
 * @param session a Map of HTTP session attribute name/value pairs.
 */
public void setSession(Map session);

22. ActionInvocation的一个重要方法
Map session = actionInvocation.getInvocationContext().getSession();

你可能感兴趣的:(xml,struts,workflow,读书,dojo)