【问题标题】:Remove Session scoped managed bean on browser close在浏览器关闭时删除会话范围的托管 bean
【发布时间】:2010-11-12 19:56:00
【问题描述】:
在 JSF 应用程序中,我想在用户关闭浏览器窗口时删除会话范围的托管 bean。在执行以下操作之前,我使用了一个链接:
session.removeAttribute("<nameOfManagedBean>");
这似乎很好地解决了这个问题。但是,即使用户在浏览器上单击“X”,我也希望运行相同的代码。
他们是否有某种方式可以在任何浏览器上正确检测到此事件?
【问题讨论】:
标签:
javascript
jsf
jakarta-ee
【解决方案1】:
顺便说一句,我已经使用 ICEFaces JSF 框架专门针对 Internet Explorer 6.0(我为我的客户端支持的浏览器......是的,读完这句话后我的头也很痛......)解决了这个问题。我已经写了一个描述here。
【解决方案2】:
在任何浏览器中?不。即使在 一些 浏览器(主要浏览器,假设 javascript 已打开等)中使用它也不是小菜一碟,因为要区分用户完全关闭窗口并不容易,导航到另一个站点,甚至是应用程序的另一个页面。
也许您可以改用会话超时?通过setMaxInactiveInterval() 方法直接设置它,或者-如果您只想删除这个单个bean,同时保持会话本身完好无损-通过后台线程定期检查getLastAccessedTime() 并在超时达到您认为必要的任何值时删除bean。