在JSF应用程序中,我想在用户关闭浏览器窗口时删除会话范围的托管bean。我在执行以下操作之前使用了一个链接:
session.removeAttribute("<nameOfManagedBean>");
这似乎很好地解决了这个问题。但是,即使用户点击浏览器上的“X”,我也希望运行相同的代码。
他们是否可以在任何浏览器上正确检测此事件?
答案 0 :(得分:2)
在任何浏览器中?没有。即使让它在某些浏览器(主要浏览器,假设javascript打开等等)上工作也没什么大不了的,因为区分完全关闭窗口的用户并不容易,导航到另一个站点甚至应用程序的另一个页面。
也许您可以使用会话超时?通过setMaxInactiveInterval()
方法直接设置它,或者 - 如果你只想删除这个bean,同时保持会话本身不变 - 通过后台线程定期检查getLastAccessedTime()
并在超时到达任何值时删除bean你认为有必要。
答案 1 :(得分:0)
顺便说一下,我已经使用ICEFaces JSF框架专门解决了Internet Explorer 6.0(我支持我的客户端的浏览器......是的,我的头脑在读完那句话之后也受伤了)。我写了一篇描述here。