Struts2: 修改拦截器中的参数值

在Struts2中,可以通过定义标签来修改拦截器的参数值。比如下面的代码对SampleAction上的exception拦截器进行参数设定,启用其log功能:

<package name="default" namespace="/" extends="struts-default">  
    <action name="SampleAction" 
            class="com.lifelaf.blog.SampleAction" >
        <interceptor-ref name="exception">
            <param name="logEnabled">true</param>
        </interceptor-ref>
        <result name="success">sample.jsp</result>
    </action>        
</package>  

但是这种写法有一个巨大的缺陷:action类定义了自己所使用的拦截器,因此它从struts-default包中继承而来的defaultStack拦截器栈就不再被使用了 — 很多情况下,开发人员所需要的仅仅是对该拦截器栈中的某些拦截器参数进行修改覆盖而已。为了做到这一点,可以将标签的属性名设置为{拦截器名}+”.”+{参数名}即可。还是以上面的代码为例,如果需要在使用defaultStack的同时启用exception拦截器的log功能,可以这么做:

<package name="default" namespace="/" extends="struts-default">  
    <action name="SampleAction" 
            class="com.lifelaf.blog.SampleAction" >
        <interceptor-ref name="defaultStack">
            <param name="exception.logEnabled">true</param>
        </interceptor-ref>
        <result name="success">sample.jsp</result>
    </action>        
</package>