如何销毁会话作用域的bean?
这样做的目的是控制bean的生命周期,使其仅在Web应用程序中的选项卡处于活动状态时才存在。 (在Web应用程序中使用基于Ajax的选项卡导航)
是否有更好的方法?(自定义作用域bean?)
如何销毁会话作用域的bean?
这样做的目的是控制bean的生命周期,使其仅在Web应用程序中的选项卡处于活动状态时才存在。 (在Web应用程序中使用基于Ajax的选项卡导航)
是否有更好的方法?(自定义作用域bean?)
Session scoped bean是在第一次涉及此bean的HttpRequest
时创建的。当session
失效时,它会被销毁。您还可以通过从HttpSession
或sessionMap
(通过FacesContext
获取)中删除它来手动销毁它。
事实上,在选项卡视图期间仅存在的Session scoped bean的创建是不合逻辑的。为此,定义Custom scoped bean将更好,但首先考虑以下问题:
这可能非常棘手,想象一下用户经常在选项卡之间切换,您正在反复创建bean。更糟糕的是,如果您在constructor
或@PostConstruct
中从DB提取数据,那么它将不会真正有效。
我的意见是,您应该忘记它(除非您需要它用于其他目的),并选择View scoped bean。此bean在访问视图后初始化,并一直存在,直到您切换到另一个视图为止-因此每次选项卡切换都不会从DB中提取数据(仍然是同一视图)。在我看来,一次获取大量数据要比例如15次... 如果您不提取任何数据,则肯定选择View scoped。但那只是我的意见。
如果您负担不起View scoped,则选择Custom scoped bean,但绝对不要选择Session scoped。
更多阅读:BalusC on JSF 2.0
希望它有所帮助!