17

@RequestScoped@SessionScopedBean 托管 bean的生命周期 由 Servlet 容器本身管理,因为它们基本上分别存储为 和 的HttpRequest属性HttpSession。JSF 如何管理@ViewScopedBean. 我知道它是在创建视图时创建的,并且在回发到另一个视图之前一直可用。但是我发现,在我们从那个视图移开之后,并没有立即收集垃圾。

4

1 回答 1

34

到时候就会被销毁

  • 执行了一个null没有结果的回发,

  • 或者,会话中的(逻辑)视图数量已超过,并且特定视图是 LRU 链中的第一个视图(在 Mojarra 中,可由上下文参数配置com.sun.faces.numberOfViewsInSessioncom.sun.faces.numberOfLogicalViews每个参数的默认值为 15),

  • 或者,会话中活动视图范围的数量已超过(在 Mojarra 中,硬编码限制为 25),另请参阅JSF 2.2 内存消耗:为什么 Mojarra 将最后 25 个视图的 ViewScoped Beans 保留在内存中?

  • 或者,会话已过期。

因此,当由于单击指向另一个页面的 GET 链接、刷新页面或关闭浏览器选项卡/窗口而卸载页面时,它不会被破坏。在满足上述条件之一之前,bean 将一直存在。无论如何,要在卸载期间销毁它,请考虑改用OmniFaces@ViewScoped

于 2013-03-13T16:47:43.900 回答