5

如何销毁会话范围的 bean?

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

有没有更好的方法来做到这一点?(自定义范围的 Bean?)

4

1 回答 1

5

会话范围的 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

希望它有所帮助!

于 2012-04-15T15:21:30.853 回答