我有一个带有一个动作类和一个拦截器的简单 struts2 Web 应用程序。getTitle()
动作类有一个从会话中获取字符串的 getter 方法。拦截器位于默认堆栈的底部,因此它在调用后最后和第一个执行。它以这样一种方式构建,即它可以在操作调用之前和之后修改会话中的标题。生成的 JSP 页面然后显示此标题。
我认为以下逻辑将适用:
- 调用运行前的拦截器逻辑
- 动作类逻辑运行
- 调用运行后的拦截器逻辑
- struts 知道结果并获取结果
.jsp
中的页面- struts 填充
<:s>
标签并从动作类中.jsp
调用。getTitle()
然而这并没有奏效。生成的 JSP 始终显示执行第 3 步之前的标题。我在我的 java 代码中添加了一些简单的日志记录,它证实了我的怀疑。这是执行顺序:
- 日志:调用运行前的拦截器逻辑
- 日志:动作类逻辑运行
- 日志:
getTitle()
动作类的方法运行- log:调用运行后的拦截器逻辑
所以不知何故,第 6 步变成了第 3 步。为什么会这样?如何在调用动作后在拦截器中添加逻辑来更改标题?