我的问题与此问题有关(可能还有其他问题):
@PreDestroy never called on @ViewScoped
正如那里所说的那样,没有简单的解决方案可以在导航时销毁视图范围的bean,并且在会话到期时似乎也适用。
在会话到期时,释放(调用@PreDestroy
方法)JSF视图范围bean的非常简单的方法会是什么样的,或者更具体地说是什么?
我在GlassFish 3.1.2上使用Java EE 6和Mojarra 2.1.x。
答案 0 :(得分:4)
创建一个@SessionScoped
bean来保存资源(在某个集合/数组中?)并将其注入@ViewScoped
bean,然后依赖于会话范围bean的@PreDestroy
。
是的,这样资源的存活时间比你想要的长一些,但这是你可以获得的最简单,最可靠的解决方案。如果要将@PreDestroy
保留在视图范围内的bean中,那么您需要以某种方式确保最终用户始终通过HTTP POST请求在该视图范围内的bean上执行导航。您无法可靠地保证(最终用户的PC可能会崩溃等等)。