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