0

在“ Struts2 in Action ”一书中,它指出:

虽然本身没有定义任何拦截器引用的操作将继承默认拦截器,但一旦操作声明了自己的拦截器,它就会失去自动默认值,并且必须显式命名 defaultStack 才能使用它。

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

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

有什么我想念的吗?

4

1 回答 1

1

这应该是一个展示如何配置自定义拦截器的示例。虽然您可以声明和应用这个单一的拦截器,但这意味着框架提供的其他拦截器将不会被执行,并且框架提供的大部分功能都不会进入行为。

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

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

看看框架实际上是如何声明拦截器堆栈的

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

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

created_a_login_interceptor

希望这会给你一些想法

于 2012-07-27T07:17:26.853 回答