首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在浏览器关闭事件中调用@PreDestroy?

如何在浏览器关闭事件中调用@PreDestroy?
EN

Stack Overflow用户
提问于 2014-06-01 20:09:46
回答 1查看 2.9K关注 0票数 0

这是我的场景。我有一个组件,它搜索一些记录,在搜索时,这些记录被标记为锁定。我使用的是JSF-2和primefaces。我的MBean是ViewScoped。现在我有一个要求,在关闭浏览器的同时,需要释放对这些记录的锁定。我一直在搜索,我最好的选择似乎是@PostDestroy。因此,如果使用PostDestroy是正确的方法,那么是否有人可以提供帮助。StackOverFlow上的一些帖子建议,PostDestroy不会在浏览器关闭事件时被调用。我我在PostDestroy上找不到太多。有没有人能就这种方法提供一些建议?

谢谢,本

EN

回答 1

Stack Overflow用户

发布于 2014-06-01 22:54:27

您的@ViewScoped Bean不知道用户是否正在关闭浏览器。对于Bean来说,客户端是浏览器还是其他HTTP客户端都无关紧要。

如果您的应用程序将回发发送到下一个视图(有关确切答案,请参见How and when is a view scope bean destroyed in JSF ),则@ViewScoped Bean的生命周期将正常结束。

您可以尝试使用JavaScript window.onunload事件检测正在关闭的浏览器,但我不建议这样做。一些浏览器会在浏览器关闭时触发此事件,其他浏览器则不会,一些浏览器会在重新加载时触发此事件,等等(有关详细信息,请参阅DOM Window unload event, is it reliable? )。

@PreDestroy注释的方法(不是@PostDestroy btw.)也可以使用not be called immediately in some cases。您只能依赖于它将在会话超时时被调用。锁定记录可能需要很长时间...

您可以使用某种调度程序在较短的时间后自行释放锁定的记录,但我建议切换到optimistic locking (在写入之前不要锁定并检查数据是否已更改)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23979711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档