我们有几个用户可以登录的web应用程序。在点击注销按钮时,必须处理一些逻辑。问题是大多数用户关闭浏览器而不点击注销按钮。我试图通过以下方式在浏览器关闭时调用我的逻辑:JSF p:remotecommand和javascript事件onbeforeunload
- 将事件“onbeforeunload”添加到了我的框架集。在浏览器关闭时,将会调用注销功能。
- 在我的注销函数中,我使用primefaces p:remoteCommand组件来调用服务器上的动作侦听器。
在当前的firefox版本中一切正常,但我有一些与IE9的问题。在IE9中关闭标签会调用我的逻辑。关闭浏览器不起作用。我的JS函数被调用,但不会执行对服务器的请求。有什么办法可以解决这个问题吗?顺便说一句:我知道这不是一个100%的解决方案,但我们需要这个功能。我的功能和p:remoteCommand看起来像那样。
function automaticLogout() {
handleAutomaticLogout();
alert('BlaBla');
}
<p:remoteCommand name="handleAutomaticLogout" actionListener="#{myBean.handleAutomaticLogout}" async="false" />
我目前的情况是,我必须在注销时发布请求的许可证。我们的会话超时时间为30分钟,但许可证必须在用户离开应用程序后直接释放。我不确定,但我认为@PreDestroy解决方案只在会话过期时才起作用? – 2012-07-25 10:47:06
为你增加了一个例子:-) – 8bitjunkie 2012-07-25 12:46:05
是的,我明白你的意思了 - 我的道歉,@PreDestroy需要会话被销毁才能触发。融合这两种方法,通过类似PrimeFaces RemoteCommand(http://www.primefaces.org/showcase/ui/remoteCommand.jsf)的方式将Session调用(在body unload上)调用到Session destroy方法中,可以让您立即使用户的会话(http://www.coderanch.com/t/384874/java/java/destroying-session-when-user-closes),并导致许可证撤销方法触发。 – 8bitjunkie 2012-07-25 13:02:12