Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何在浏览器关闭事件中调用@PreDestroy?_Jsf 2_Primefaces - Fatal编程技术网

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

Jsf 2 如何在浏览器关闭事件中调用@PreDestroy?,jsf-2,primefaces,Jsf 2,Primefaces,这是我的设想。我有一个组件可以搜索一些记录,在搜索时,这些记录被标记为锁定。我正在使用JSF-2和primefaces。我的MBean是可视范围的。现在我有一个要求,在关闭浏览器时,需要释放对这些记录的锁定。我正在搜索,我的最佳选择似乎是@PostDestroy。所以,是否有人能提供帮助,使用PostDestroy是正确的方法。StackOverFlow上的一些线程表明,在浏览器关闭事件中不会调用PostDestroy。我无法在PostDestroy上找到太多信息。有人能提供这种方法的指导吗 谢

这是我的设想。我有一个组件可以搜索一些记录,在搜索时,这些记录被标记为锁定。我正在使用JSF-2和primefaces。我的MBean是可视范围的。现在我有一个要求,在关闭浏览器时,需要释放对这些记录的锁定。我正在搜索,我的最佳选择似乎是@PostDestroy。所以,是否有人能提供帮助,使用PostDestroy是正确的方法。StackOverFlow上的一些线程表明,在浏览器关闭事件中不会调用PostDestroy。我无法在PostDestroy上找到太多信息。有人能提供这种方法的指导吗

谢谢,
Ben

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

如果应用程序将回发发送到下一个视图,则
@ViewScoped
Bean的生存期将正常结束(有关确切答案,请参阅)

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

@PreDestroy
带注释的方法(不是@postdroy btw.)也可以。您只能依赖于在会话超时时调用它。锁定记录可能需要很长时间

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