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

Ben*_*Ben 4 jsf-2

如何销毁会话范围的bean?

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

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

Fal*_*lup 5

会话范围 bean在第一次HttpRequest涉及此bean时创建.session无效时销毁.您也可以通过从中删除它来手动销毁它HttpSession,或者sessionMap(通过FacesContext).

事实是,创建会话范围的 bean只会在选项卡视图中生效,这是不合逻辑的.为此,定义Custom scoped bean会更好,但首先要考虑它:

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

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

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

如果您买不起View作用域,请转到Custom scoped bean,但绝对不是Session作用域.

进一步阅读:JSF 2.0上的BalusC

希望它有所帮助!

  • 会话bean在第一次请求时创建,而不是在创建会话时自动创建. (2认同)