修改struts2 的默认拦截器的参数 时的顺序有关问题
修改struts2 的默认拦截器的参数 时的顺序问题
struts2 的默认拦截器的参数可以修改,比如打开exception拦截器的log功能,设定checkbox没有选择时的默认值等等,在使用过程中发现如果顺序不对,设定是无效的。
例如:
我想打开Exception的log,并且想重定义checkbox.uncheckedValue。
一开始是这么写的,defaultStack不动,在我自己定义的拦截器栈mydefault中重新定义。
这么设定看似没有问题,但是exception.logEnabled和exception.logLevel并没有生效。
如果把<interceptor-ref name="defaultStack" />这一行放在设定参数的前面,就会导致checkbox.uncheckedValue无效。
最后采用了重定义defaultStack,把log参数的重定义写在defaultStack中,如下所示:
然以把第一段代码中关于log参数重定义的部分去掉。这么一来,log和checkbox的参数都被重新定义了。
不知道为什么会这样,或许因为CheckboxInterceptor和ExceptionMappingInterceptor一个在struts2包中,一个在xwork包中的缘故吧。有时间再调查吧。
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包中的缘故吧。有时间再调查吧。