`

修改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包中的缘故吧。有时间再调查吧。
分享到:
评论
1 楼 cjh326419411 2013-04-12  
你上面肯定不行啊,你自己这么定义就覆盖了 struts2的默认拦截器

相关推荐

    Struts2 拦截器的执行顺序(二十九)

    通过分析这些源代码,我们可以了解自定义拦截器的实现方式以及与默认拦截器如何协同工作。 而`WebRoot`目录则包含了Web应用的静态资源,如HTML、CSS、JavaScript文件,以及Struts2的配置文件(如`struts.xml`)和...

    Struts2拦截器源码

    例如,`struts-default.xml`中包含了默认的拦截器栈,如`params`拦截器用于处理请求参数,`exception`拦截器用于处理异常,`validation`拦截器进行数据校验。 在深入源码之前,我们需要了解几个关键类: 1. `...

    struts2实现拦截器、

    在Struts2中,拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序形成一个拦截器链。当请求到达Action时,这些拦截器会按照顺序逐个执行其`intercept()`方法,最后调用实际的动作方法。拦截器可以独立于...

    struts2 拦截器实例

    2. **默认拦截器栈**:`defaultStack`包含了Struts2内置的一些拦截器,如`params`(处理参数),`i18n`(处理国际化),`exception`(处理异常)等。 3. **应用全局拦截器**:现在,所有Action都会在执行前经过`...

    难经3:Struts2,拦截器拦不住Result?

    3. **异常处理**:当Action执行抛出异常时,Struts2默认会跳过剩余的拦截器并执行相应的异常Result。如果拦截器处理不当,可能会导致预期的Result无法执行。 4. **ActionInvocation**:`ActionInvocation`是Struts2...

    struts2拦截器应用小例子

    当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...

    Struts2拦截器实现权限控制demo

    这里,我们创建了一个名为“myStack”的拦截器栈,并在其中添加了默认拦截器栈和我们自定义的`authorization`拦截器。 3. 应用拦截器:接下来,我们需要在Action配置中引用这个拦截器栈。这样,每次请求该Action时...

    Struts2拦截器源程序

    通过`&lt;package&gt;`标签的`default-interceptor-ref`属性,可以指定默认拦截器栈,或者在具体的Action配置中使用`interceptor-ref`引用特定的拦截器栈。 **5. 拦截器的生命周期** 拦截器的生命周期包括实例化、初始化...

    一个Struts2的核心拦截器例子

    - 使用`&lt;default-interceptor-ref&gt;`定义默认拦截器栈,所有未明确指定拦截器的动作都将使用这个栈。 4. **自定义拦截器**: - 创建一个新的Java类,实现`Interceptor`接口并重写`intercept()`方法。 - 在`...

    struts2.X 拦截器源码

    `defaultStack`是Struts2提供的默认拦截器栈,包含了如`exception`、`params`、`i18n`等常用拦截器。 了解了拦截器的基本原理后,我们可以通过`Struts2.x 拦截器.avi`这个视频文件深入学习Struts2拦截器的实现细节...

    struts2 用拦截器 实现用户权限登录

    默认拦截器栈`defaultStack`包含了Struts2预定义的一些拦截器,如`params`、`i18n`等。在添加自定义拦截器时,可以将其插入到默认拦截器栈中,也可以创建自定义的拦截器栈。 ### 五、测试与优化 完成上述步骤后,你...

    Struts2的拦截器的使用详解

    -- 其他默认拦截器 --&gt; &lt;result name="success"&gt;/success.jsp &lt;result name="invalid"&gt;/error.jsp ``` 至此,你已经掌握了Struts2拦截器的基本使用。实际开发中,你可以根据项目需求灵活组合和扩展拦截...

    struts2拦截器实现拦截不文明字迹

    -- 将自定义拦截器添加到默认拦截器栈中 --&gt; &lt;!-- 配置Action使用自定义拦截器栈 --&gt; &lt;result name="profanityError"&gt;/errorPage.jsp &lt;!-- 其他结果配置 --&gt; &lt;/struts&gt; ``` 在上述配置中,`...

    struts2拦截器原理

    在这个例子中,`defaultStack`是Struts2默认提供的拦截器栈,包含了一些基础的拦截器,如`params`(处理请求参数)、`i18n`(国际化)等。`myCustomInterceptor`则是我们自定义的拦截器。 创建自定义拦截器有三种...

    struts2拦截器国际化

    通过这种方式,我们可以在不修改Action代码的情况下,利用Struts2拦截器实现国际化策略的动态调整,从而提供更灵活的多语言支持。 总的来说,Struts2拦截器和国际化是两个关键特性,它们分别提供了控制流管理和多...

    Struts2之拦截器原理分析及使用-上案例struts007

    Struts2还提供了一些内置的拦截器,如params(处理请求参数)、i18n(国际化支持)、exception(异常处理)等。这些拦截器极大地丰富了框架的功能,减少了开发者的工作量。 总的来说,Struts2的拦截器机制是其强大...

    struts2自定义拦截器配置心得

    `defaultStack`包含了Struts2提供的所有默认拦截器,确保了基础功能的正常运行。 3. **包(package)与拦截器的关联**: - `&lt;package&gt;`元素定义了Action的集合,通过`extends`属性可以继承其他包的配置,例如`...

    struts2 拦截器的使用(继承抽象拦截器)

    默认拦截器栈包含了Struts2框架预定义的一些拦截器,如`ExceptionMappingInterceptor`用于处理异常,`PrepareInterceptor`用于准备Action,`ModelDrivenInterceptor`用于模型驱动等。 3. `destroy()`: 这个方法在...

    JSP 开发之Struts2内建自定义拦截器.docx

    默认情况下,所有Action都会应用名为`defaultStack`的默认拦截器栈。如果你需要添加自定义拦截器,可以显式地引用它们。 ```xml &lt;result&gt;success.jsp ``` 在上述配置中,`someAction`会先经过`...

    Struts 2的拦截器

    当请求到达Struts2时,框架会查找配置文件,如`struts-default.xml`,其中包含了默认的拦截器及其配置。这些拦截器实例化后形成一个列表,然后由ServletDispatcher按照配置的顺序逐一调用。拦截器的调用过程类似于...

Global site tag (gtag.js) - Google Analytics