我正在使用拦截器在基于Struts的应用程序中实现一些功能,而对其生命周期的工作方式却感到困惑.根据Struts文档(“Interceptors”、“Writing interceptors”和“Big picture”),它应该像这样工作:
FirstInterceptor
NextInterceptor
LastInterceptor
Action
Result
LastInterceptor
NextInterceptor
FirstInterceptor
这是有道理的,但是我在如何区分在操作之前执行的拦截器调用与在结果呈现之后执行的拦截器调用之间有所挣扎(我在这里跳过了PreResultListeners).如果我启动了调试器,则会收到两次调用intercept()的调用,并且在所传递的ActionInvocation上找不到任何明显的内容. (更新:这部分是我的主要困惑,一旦知道,我就可以在下面回答我的问题)
“Big picture”页面对被调用的“之前”和“之后”“子句”有些混淆,但是我不知道该怎么做:
[…]
This includes invoking any Interceptors (the before clause) in advance of invoking the Action itself.
[…]
Interceptors are executed again (in reverse order, calling the after clause).
[…]
(更新:这两个句子仍然很糟糕)