如何以及何时在JSF中销毁@ViewScoped bean?

时间:2013-03-07 07:29:08

标签: jsf jsf-2 managed-bean destroy view-scope

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

1 个答案:

答案 0 :(得分:27)

时会被销毁
  • 已执行非null结果的回发,

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

  • 或者,会话中的actieve视图范围已超过(在Mojarra中,这是25的硬编码限制),另请参阅JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory?

  • 或者,会话已过期。

因为单击另一个页面的GET链接或刷新页面或关闭浏览器选项卡/窗口而导致页面被卸载时,将被销毁。豆子会活得很久,直到满足一个新的条件。无论如何要在卸载期间销毁它,请考虑改为使用OmniFaces @ViewScoped