【问题标题】:modified values for Struts 2 action variable in interceptor post processing not sustained拦截器后处理中 Struts 2 动作变量的修改值未持续
【发布时间】:2013-02-04 23:25:41
【问题描述】:

我需要在执行操作之前格式化一些变量,并在执行操作后但在渲染之前重新格式化。我添加了一个拦截器。我在调用方法调用之前格式化动作变量值,并在调用方法调用之后重新格式化。在拦截器中调用方法之前所做的更改在动作执行方法中有效。但是在页面渲染时看不到调用方法执行后对动作变量重新格式化所做的更改。框架不会接受拦截器后处理部分中动作变量所做的更改吗?请帮忙。

【问题讨论】:

  • 您能否提供您的用例的详细信息?通常,该操作可以处理格式问题。你的问题很有趣。
  • 同意,这看起来像是治标不治本。

标签: struts2 interceptor


【解决方案1】:

当invoke 将控制权返回给拦截器时,结果已经呈现。

您需要按照big yellow box on the "Writing Interceptors" doc page 中的说明实现PreResultListener。

【讨论】:

  • 等等,什么?在拦截器完成并返回之前,struts 怎么知道 哪些 的结果将被应用?例如,如果动作类返回成功,但我的拦截器放弃了它并返回其他东西怎么办?或者,如果结果是动态的,例如结果 ${myPage}.jsp,其中 myPage 是在动作/拦截器周期中某处设置的字符串,该怎么办?
  • @user1884155 因为它就是这样工作的。返回结果和短路链和返回 invocation.invoke() 的结果是有区别的。
  • 我已经阅读了大量关于 struts2 的教程,对此我感到非常困惑。即使您提供的链接也有一种非常古怪的说法:“动作类的动作方法返回的结果就是将要使用的结果,而拦截器随后返回的任何内容都不会被考虑在内”。那么一个附带问题:如果拦截器返回的字符串似乎无论如何都被丢弃了,那么它的意义何在?
  • @user1884155 ...但不仅仅是拦截器的丢弃结果是验证之类的工作方式。如果您到达操作调用,那么除非您有一个预结果侦听器,否则操作将确定结果。那是因为我所说的 - 在 invocation.invoke() 返回时已经呈现响应。这并不意味着在 invoke() 之后功能不能存在于拦截器中——考虑一个 open-session-in-view 实现。
猜你喜欢
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多