如何销毁会话范围的bean?
这样做的目的是控制bean的生命周期,使其仅在Web应用程序中的选项卡处于活动状态时才存在。 (在webapp中使用基于Ajax的选项卡导航)
有没有更好的方法呢? (Custom Scoped Beans?)
答案 0 :(得分:5)
会话作用域 bean是在涉及此bean的第一个HttpRequest
上创建的。 session
失效时销毁。您也可以通过从HttpSession
或sessionMap
(通过FacesContext
)中删除它来手动销毁它。
事实是,不合逻辑创建会话作用域 bean,它只会在标签视图中生效。为了这个目的,定义自定义范围 bean会更好,但首先要考虑它:
嗯,它可能非常棘手,想象用户只是经常在标签之间切换,而你一遍又一遍地重新创建bean。更糟糕的是,如果您在constructor
或@PostConstruct
中从数据库中获取数据,该怎么办?它不会真正有效。
我的意见是你应该忘掉它(除非你出于其他目的需要它)并选择一个查看作用域 bean。这个bean在访问视图后会被初始化,直到您不切换到另一个视图 - 因此在每个选项卡上都没有DB提取(仍然是相同的视图)。 IMO最好一次获取大量数据,例如。 15次......如果您没有获取任何数据,那么请选择查看范围。但就像我说的那样,这只是我的意见。
如果您承担不起查看范围,请转到自定义范围 bean,但绝对不是会话范围。
进一步阅读:BalusC on JSF 2.0
希望它有所帮助!