Jsf 2 如何在浏览器关闭事件中调用@PreDestroy?
这是我的设想。我有一个组件可以搜索一些记录,在搜索时,这些记录被标记为锁定。我正在使用JSF-2和primefaces。我的MBean是可视范围的。现在我有一个要求,在关闭浏览器时,需要释放对这些记录的锁定。我正在搜索,我的最佳选择似乎是@PostDestroy。所以,是否有人能提供帮助,使用PostDestroy是正确的方法。StackOverFlow上的一些线程表明,在浏览器关闭事件中不会调用PostDestroy。我无法在PostDestroy上找到太多信息。有人能提供这种方法的指导吗 谢谢,Jsf 2 如何在浏览器关闭事件中调用@PreDestroy?,jsf-2,primefaces,Jsf 2,Primefaces,这是我的设想。我有一个组件可以搜索一些记录,在搜索时,这些记录被标记为锁定。我正在使用JSF-2和primefaces。我的MBean是可视范围的。现在我有一个要求,在关闭浏览器时,需要释放对这些记录的锁定。我正在搜索,我的最佳选择似乎是@PostDestroy。所以,是否有人能提供帮助,使用PostDestroy是正确的方法。StackOverFlow上的一些线程表明,在浏览器关闭事件中不会调用PostDestroy。我无法在PostDestroy上找到太多信息。有人能提供这种方法的指导吗 谢
Ben您的
@ViewScoped
Bean不知道用户是否正在关闭浏览器。对于Bean来说,客户机是浏览器还是其他HTTP客户机并不重要
如果应用程序将回发发送到下一个视图,则@ViewScoped
Bean的生存期将正常结束(有关确切答案,请参阅)
您可以尝试使用JavaScriptwindow.onunload
事件检测关闭的浏览器,但我不建议这样做。一些浏览器在浏览器关闭时触发此事件,其他浏览器则不会,一些浏览器在重新加载时触发此事件(有关更多详细信息,请参阅)
@PreDestroy
带注释的方法(不是@postdroy btw.)也可以。您只能依赖于在会话超时时调用它。锁定记录可能需要很长时间
您可以使用某种调度器在较短的时间后释放锁定的记录,但我建议切换到(在写入之前不要锁定并检查数据是否已更改)