在我的应用程序中,我根据用户正在查看的当前页面创建了一些锁定/解锁功能。用户可以查看页面并获取存储在我的数据库中的锁,当他们离开时,锁被释放并且数据库被更新。
我正在尝试处理用户关闭浏览器窗口而不注销的情况。他们仍然会持有锁,我需要释放它,并且需要进行数据库调用。
有没有办法在使用Spring或其他东西的JSF应用程序中处理这个?
我知道onbeforeunload的javascript函数但是我需要调用一个java方法来使我能够更新数据库。
答案 0 :(得分:1)
unload
和beforeunload
事件不会对您有所帮助,因为它不符合规范,保证在这些事件中触发的任何ajax请求都会成功命中服务器。不止于此,这不会。
最可靠的方法是保持服务器端会话的生命周期非常短,例如1分钟并在页面上引入一个ajax轮询器,它在同一会话中每分钟(减去几秒)轮询到服务器,直到用户处于非活动状态超过实际最大会话超时。可以通过侦听JavaScript键盘(keyup
)和鼠标(click
)事件来测试用户活动。
答案 1 :(得分:0)
我目前正在开发一个双窗口应用程序,需要检测窗口何时关闭。
我的JSF应用程序使用ICEfaces。它为ViewScoped bean提供@WindowDisposed
注释。使用此批注,窗口关闭时将调用ViewScoped bean的@PreDestroy
方法。
我在绑定到viewScoped bean的页面中包含了一个h:inputHidden
标记,这有助于检测窗口关闭和执行服务器端代码。