2011-01-27 77 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,這在檢測窗口關閉和執行服務器端代碼方面起作用。

相關問題