0

我有一个带有一个动作类和一个拦截器的简单 struts2 Web 应用程序。getTitle()动作类有一个从会话中获取字符串的 getter 方法。拦截器位于默认堆栈的底部,因此它在调用后最后和第一个执行。它以这样一种方式构建,即它可以在操作调用之前和之后修改会话中的标题。生成的 JSP 页面然后显示此标题。

我认为以下逻辑将适用:

  1. 调用运行前的拦截器逻辑
  2. 动作类逻辑运行
  3. 调用运行后的拦截器逻辑
  4. struts 知道结果并获取结果.jsp中的页面
  5. struts 填充<:s>标签并从动作类中.jsp调用。getTitle()

然而这并没有奏效。生成的 JSP 始终显示执行第 3 步之前的标题。我在我的 java 代码中添加了一些简单的日志记录,它证实了我的怀疑。这是执行顺序:

  1. 日志:调用运行前的拦截器逻辑
  2. 日志:动作类逻辑运行
  3. 日志:getTitle()动作类的方法运行
  4. log:调用运行后的拦截器逻辑

所以不知何故,第 6 步变成了第 3 步。为什么会这样?如何在调用动作后在拦截器中添加逻辑来更改标题?

4

1 回答 1

1

简而言之:实现PreResultListener在渲染之前但在调用之后发生的事情。

http://struts.apache.org/release/2.3.x/docs/writing-interceptors.html

我不知道是什么title,但我很难理解为什么任何与页面标题或域对象中的书名或其他很多东西相关的东西都需要:

  1. 被操作检索,或
  2. 被拦截器改变
于 2014-07-29T17:30:51.070 回答