我们是否必须在指定自己的拦截器的操作中明确提到defaultStack?

时间:2012-07-27 07:02:07

标签: struts2 struts

在“ Struts2 in Action ”一书中,其声明:

  

虽然没有定义任何拦截器参考的动作本身也会   一旦动作声明它,就会继承默认的拦截器   自己的拦截器,它失去了自动默认值,必须明确   将defaultStack命名为使用它。

但是在网上的这么多例子中,我看到action部分声明了自己的拦截器,但仍然不需要像here那样声明默认堆栈。他们的代码是:

<action name="TestLogger" class="vaannila.TestLoggerAction">
            <interceptor-ref name="logger" />
            <result name="success">/success.jsp</result>
</action>

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:1)

这应该是一个示例来说明如何配置自定义拦截器。虽然您可以声明并应用此单个拦截器,但这意味着框架提供的其他拦截器将无法执行,并且框架提供的大多数功能都不会进来采取行动。

作者试图解释的是,如果我们定义自己的拦截器堆栈并且不继承默认堆栈或者没有定义框架使用的其他拦截器,那么大多数功能都将丢失

可以基于每个操作配置拦截器。您自己的自定义拦截器可以与框架捆绑的拦截器混合和匹配。拦截器在堆栈中定义,指定执行顺序,在大多数情况下,在定义我们的自定义拦截器堆栈时,我们最终会扩展默认堆栈或以我们自己的方式定义提供的拦截器执行。

看一下框架

实际如何声明拦截器堆栈

所以简而言之,如果你看到拦截器堆栈是一组组合在一起的拦截器,它们将按照堆栈中定义的顺序被触发。

定义自定义拦截器的另一个例子

creating_a_login_interceptor

希望这会给你一些想法