会话结束时销毁视图范围的bean

时间:2012-10-26 07:10:07

标签: jsf java-ee jsf-2 glassfish view-scope

我的问题与此问题有关(可能还有其他问题):

@PreDestroy never called on @ViewScoped

正如那里所说的那样,没有简单的解决方案可以在导航时销毁视图范围的bean,并且在会话到期时似乎也适用。

在会话到期时,释放(调用@PreDestroy方法)JSF视图范围bean的非常简单的方法会是什么样的,或者更具体地说是什么?

我在GlassFish 3.1.2上使用Java EE 6和Mojarra 2.1.x。

1 个答案:

答案 0 :(得分:4)

创建一个@SessionScoped bean来保存资源(在某个集合/数组中?)并将其注入@ViewScoped bean,然后依赖于会话范围bean的@PreDestroy

是的,这样资源的存活时间比你想要的长一些,但这是你可以获得的最简单,最可靠的解决方案。如果要将@PreDestroy保留在视图范围内的bean中,那么您需要以某种方式确保最终用户始终通过HTTP POST请求在该视图范围内的bean上执行导航。您无法可靠地保证(最终用户的PC可能会崩溃等等)。