2

我正在使用拦截器在我的基于 Struts 的应用程序中实现一些东西,我对它们的生命周期如何工作感到困惑。根据 Struts 文档(“拦截器”“编写拦截器”“大图”),它应该像这样工作:

第一个拦截器
  下一个拦截器
    最后拦截器
      行动
      结果
    最后拦截器
  下一个拦截器
第一个拦截器

这是有道理的,但是我在如何区分在操作之前执行的拦截器调用和在结果呈现之后执行的拦截器调用时遇到了困难(我在PreResultListener这里跳过了 s )。如果我启动一个调试器,我会接到两个电话,并且在我被传递intercept()时找不到任何太明显的东西。ActionInvocation 更新:这部分是我的主要困惑,一旦我得到它,我就可以在下面回答我的问题)

大图”页面对所谓的“之前”和“之后”“子句”有些混淆,但我不知道该怎么做:

[...]

这包括在调用 Action 本身之前调用任何拦截器(before 子句)。

[...]

拦截器被再次执行(以相反的顺序,调用 after 子句)。

[...]

更新:尽管这两个句子仍然很糟糕)

4

1 回答 1

2

拦截器没有两次调用:

public class MyInterceptor implements Interceptor {

    public String intercept(ActionInvocation invocation) {
        /*
        This is before Action.execute(),
        and before all interceptors down the stack
        */

        String code = invocation.invoke();

        /*
        This is after Action.execute(),
        the result rendering and all
        interceptors down the stack,
        but before the interceptors
        higher up in the stack.
        */

        return code;
    }

}

(请注意,我在调试器中看到的“两次拦截调用”是由于我没有注意到的不太明显的重定向造成的。这让我很困惑。)

于 2010-10-11T16:33:55.703 回答