【问题标题】:View scoped bean is not getting destroyed查看作用域 bean 没有被破坏
【发布时间】:2013-03-04 18:35:42
【问题描述】:

我正在使用 JSF 2.1 和 primefaces 3.4。

我所有的 xhtml 视图都由具有页眉、左侧导航面板、页脚和内容的布局组成。托管 bean 位于 视图范围

在我的大多数观点中,我使用 preRenderView 类型的 f:event 侦听器来初始化某些属性和服务。在监听器中,我有条件语句来检查 postback 请求。只有当请求不是postback时,它才会在preRenderView监听器中执行完整的代码。

即使我通过左侧导航面板链接导航到任何其他页面(例如从页面 A 到页面 B),查看范围 不会被破坏,当我再次返回页面 A 时,检查 postback 请求返回 true。不知道为什么正在发生。

是否有人可以帮助我?

提前致谢。

【问题讨论】:

  • 将新参数添加到返回页面的链接,并在 init 内部检查回发
  • 我很想知道您是如何确定视图范围也不会被破坏的。是因为@PreDestroy 从未被调用还是其他原因?
  • 感谢@rdcrng。是的 PreDestroy 没有被调用,但现在知道它正在破坏 bean。

标签: jsf-2


【解决方案1】:

您需要通过 GET 而不是 POST 进行导航。

即,使用<h:link><h:button> 而不是<h:commandLink><h:commandButton> 进行简单的逐页导航。这样isPostback() 将返回false

此外,您不清楚您是如何观察到视图范围的 bean 没有被破坏的。您是否在 bean 的构造函数上放置了一个调试断点,以查看它是否在请求新页面时被调用?如果它确实是完全相同的实例,那么只有当您实际上有条件地包含一个新页面而不是真正导航到物理上不同的视图时才会发生这种情况。

【讨论】:

  • 感谢@BalusC。实际上,它正在破坏 bean。我在 bean 的构造函数上使用调试断点进行了检查,但它没有调用 PreDestroy。另外,如果我使用
  • 我的问题现在解决了。我仍在使用 commandLink 进行页面导航,但现在我不使用操作,而是使用 actionListener,然后在此侦听器中,一旦处理完所有内容并将其放入会话中,我将使用重定向进行导航。
猜你喜欢
  • 1970-01-01
  • 2017-10-30
  • 2011-09-19
  • 2016-07-11
  • 2013-02-23
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
相关资源
最近更新 更多