2011-01-27 72 views
1

在我的应用程序中,我基于用户正在查看的当前页面创建了一些锁定/解锁功能。用户可以查看页面,并获取存储在我的数据库中的锁定,当他们离开锁定并释放数据库并更新数据库时。JSF - 检测用户何时退出浏览器窗口

我想处理用户关闭浏览器窗口而不注销的情况。他们仍然会保持锁定状态,我需要将其释放,并且需要发生数据库调用。

有没有办法在JSF应用程序中使用Spring或其他东西来处理这个问题?

我知道javascript函数onbeforeunload,但我需要调用一个java方法,使我能够更新数据库。

回答

1

unloadbeforeunload事件不会帮助你在这里,因为它通过保证这是这些事件中的任何发射Ajax请求被曾经打算成功击中服务器的规格不是。通常情况下,这不会。

最可靠的方法是保持服务器端会话生存期很短,例如, 1分钟,并在页面上引入一个ajax轮询器,该轮询器每分钟(减少几秒)在同一个会话内向服务器轮询,直到用户处于非活动状态的时间超过最大会话超时时间的。用户活动可以通过监听JavaScript键盘(keyup)和鼠标(click)事件来测试。

+0

但如果用户退出浏览器窗口不是ajax轮询器丢失的状态,因为它驻留在当前用户的会话中?如果这不是一个正确的假设,这可能是我缺乏对一切如何运作的知识。 @BalusC – medium 2011-01-27 19:37:56

0

我目前正在研究两个窗口的应用程序,并需要检测何时关闭一个窗口。

我的JSF应用程序使用ICEfaces。它为ViewScoped bean提供了一个@WindowDisposed注释。通过这个注释,当窗口关闭时,ViewScoped bean的@PreDestroy方法将被调用。

我在我的页面中包含了一个​​标签,该标签绑定到viewScoped bean,这在检测窗口关闭和执行服务器端代码方面起作用。