我有一个简单的struts2 Web应用程序,它有一个动作类和一个拦截器。 action类有一个getter方法getTitle()
,它从会话中获取一个字符串。拦截器位于默认堆栈的底部,因此它在调用之后最后执行。它以这样的方式构建,它可以修改在动作调用和AFTER调用之前的会话中的标题。然后生成的JSP页面显示此标题。
我认为以下逻辑适用:
- 调用运行之前的拦截器逻辑
- 动作类逻辑运行
- 调用运行后的拦截器逻辑
- struts知道结果并获得结果中的
.jsp
页面- struts填写
醇><:s>
中的.jsp
代码,并从动作类中调用getTitle()
。
然而,这并没有奏效。生成的JSP始终显示在执行第3步之前的标题。我在我的java代码中添加了一些简单的日志记录,这证实了我的怀疑。这是执行的顺序:
- log:调用运行之前的拦截器逻辑
- log:动作类逻辑运行
来自操作类的- log:
getTitle()
方法- log:调用运行后的拦截器逻辑
醇>
所以不知何故,第6步成为第3步。为什么这样,我怎样才能在我的拦截器AFTER动作调用中添加逻辑来改变标题?
答案 0 :(得分:1)
Nutshell:实现PreResultListener
以在渲染之前发生事情,但是在调用之后。
http://struts.apache.org/release/2.3.x/docs/writing-interceptors.html
我不知道title
是什么,但我很难理解为什么任何与页面标题或域名对象的书名等相关的内容都需要: