在浏览器关闭时删除会话范围的托管bean

时间:2009-07-21 23:10:29

标签: javascript jsf java-ee

在JSF应用程序中,我想在用户关闭浏览器窗口时删除会话范围的托管bean。我在执行以下操作之前使用了一个链接:

session.removeAttribute("<nameOfManagedBean>");

这似乎很好地解决了这个问题。但是,即使用户点击浏览器上的“X”,我也希望运行相同的代码。

他们是否可以在任何浏览器上正确检测此事件?

2 个答案:

答案 0 :(得分:2)

任何浏览器中?没有。即使让它在某些浏览器(主要浏览器,假设javascript打开等等)上工作也没什么大不了的,因为区分完全关闭窗口的用户并不容易,导航到另一个站点甚至应用程序的另一个页面。

也许您可以使用会话超时?通过setMaxInactiveInterval()方法直接设置它,或者 - 如果你只想删除这个bean,同时保持会话本身不变 - 通过后台线程定期检查getLastAccessedTime()并在超时到达任何值时删除bean你认为有必要。

答案 1 :(得分:0)

顺便说一下,我已经使用ICEFaces JSF框架专门解决了Internet Explorer 6.0(我支持我的客户端的浏览器......是的,我的头脑在读完那句话之后也受伤了)。我写了一篇描述here