JSF 2 - 如何销毁会话范围的bean

时间:2012-04-15 13:20:12

标签: jsf-2

如何销毁会话范围的bean?

这样做的目的是控制bean的生命周期,使其仅在Web应用程序中的选项卡处于活动状态时才存在。 (在webapp中使用基于Ajax的选项卡导航)

有没有更好的方法呢? (Custom Scoped Beans?)

1 个答案:

答案 0 :(得分:5)

会话作用域 bean是在涉及此bean的第一个HttpRequest上创建的。 session失效时销毁。您也可以通过从HttpSessionsessionMap(通过FacesContext)中删除它来手动销毁它。

事实是,不合逻辑创建会话作用域 bean,它只会在标签视图中生效。为了这个目的,定义自定义范围 bean会更好,但首先要考虑它:

  • 为什么需要这样的功能?因为记忆?

嗯,它可能非常棘手,想象用户只是经常在标签之间切换,而你一遍又一遍地重新创建bean。更糟糕的是,如果您在constructor@PostConstruct从数据库中获取数据,该怎么办?它不会真正有效。

我的意见是你应该忘掉它(除非你出于其他目的需要它)并选择一个查看作用域 bean。这个bean在访问视图后会被初始化,直到您不切换到另一个视图 - 因此在每个选项卡上都没有DB提取(仍然是相同的视图)。 IMO最好一次获取大量数据,例如。 15次......如果您没有获取任何数据,那么请选择查看范围。但就像我说的那样,这只是我的意见。

如果您承担不起查看范围,请转到自定义范围 bean,但绝对不是会话范围

进一步阅读:BalusC on JSF 2.0

希望它有所帮助!