修改struts2 的默认拦截器的参数 时的顺序问题

struts2 的默认拦截器的参数可以修改,比如打开exception拦截器的log功能,设定checkbox没有选择时的默认值等等,在使用过程中发现如果顺序不对,设定是无效的。
例如:
我想打开Exception的log,并且想重定义checkbox.uncheckedValue。
一开始是这么写的,defaultStack不动,在我自己定义的拦截器栈mydefault中重新定义。

<!-- 自定义拦截器栈:名为mydefault -->
<interceptor-stack name="mydefault">
<!-- 自定义拦截器 -->
<interceptor-ref name="message" />

<!-- 自定义拦截器 -->
<interceptor-ref name="authority" />

<!-- 覆盖checkbox拦截器的属性,当页面上的checkbox没有被选择时,默认为0 -->
<!-- 打开log -->
<interceptor-ref name="defaultStack">
<param name="checkbox.uncheckedValue">0</param>
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">info</param>
</interceptor-ref>

<!-- 系统默认的拦截器 -->
<interceptor-ref name="defaultStack" />
</interceptor-stack>

这么设定看似没有问题,但是exception.logEnabled和exception.logLevel并没有生效。
如果把<interceptor-ref name="defaultStack" />这一行放在设定参数的前面,就会导致checkbox.uncheckedValue无效。

最后采用了重定义defaultStack,把log参数的重定义写在defaultStack中,如下所示:

<!-- 重新定义默认拦截器栈 -->
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception">
<!-- 重定义默认拦截器的参数 -->
<param name="logEnabled">true</param>
<param name="logLevel">info</param>
</interceptor-ref>
<interceptor-ref name="alias" />
<interceptor-ref name="servletConfig" />
<interceptor-ref name="prepare" />
<interceptor-ref name="i18n" />
<interceptor-ref name="chain" />
<interceptor-ref name="debugging" />
<interceptor-ref name="profiling" />
<interceptor-ref name="scopedModelDriven" />
<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>

<!-- 把ConversionError换成自己的 -->
<interceptor-ref name="myConversionError" />
<!-- <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>

然以把第一段代码中关于log参数重定义的部分去掉。这么一来,log和checkbox的参数都被重新定义了。

不知道为什么会这样,或许因为CheckboxInterceptor和ExceptionMappingInterceptor一个在struts2包中,一个在xwork包中的缘故吧。有时间再调查吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值