2016-02-29 67 views
0

有沒有一種方法可以控制何時停止向服務器發送心臟跳動?控制Vaadin心臟跳動

我的要求是UI不會在用戶鍵入文本框或將鼠標懸停在用戶界面上時過期。

當然,當用戶在頁面上進行一些活動時,我們會發送一些java腳本來發送一些服務器請求,最終導致UI過期。

但我更願意通過心跳來控制它,如果用戶真的離開了用戶界面,那麼在超時後停止發送心跳但在用戶輸入時繼續發送心跳(以其定義的速率)一個文本框或懸停鼠標。

最好的處理方式是什麼?

+0

UI是否應該到期?如果不是,那麼您可以使用推送機制來阻止UI過期 –

+0

不,我希望UI在用戶絕對不活動的情況下過期 – SashikaXP

回答

0

據我所知,只要有用戶輸入,就希望自己的用戶界面一直存在。如果用戶閒置用戶界面應該被刪除,而不是被心跳所阻擋。

您可以通過禁用心跳機制來做到這一點。將參數closeIdleSession設置爲true將有所斬獲。 在你的web.xml寫:

<servlet> 
    ... 
    <init-param> 
     <param-name>closeIdleSessions</param-name> 
     <param-value>true</param-value> 
    </init-param> 

如果用戶觸發指定的超時時間沒有要求,會話無效。這樣,會話超時過期後,UI將被銷燬。會話超時在web.xml通過

<session-config> 
    <session-timeout>60</session-timeout><!-- in minutes --> 
</session-config> 

設置通過添加TextChangeListener你的文本字段中,鍵入將發送請求,並自動將刷新服務器超時。

+0

您在前兩行中的斷言絕對正確,但所描述的解決方案並非我所期望的。在許多視圖中有許多文本框,並且爲每個視圖添加一個「TextChangeListener」是一種矯枉過正的行爲。我只是需要一些鉤住心跳客戶端API和如果沒有任何用戶活動的用戶界面頂部抑制心臟跳動,所以UI會自動過期。我相信這是可能的,因爲心臟跳動並檢測用戶界面上的用戶活動都是Java腳本。 – SashikaXP

+0

我承認,如果用戶只是鍵入並懸停在控件上,但實際上並未將任何表單輸入提交給服務器,則該解決方案可能無法用於您。假設您的會話超時時間爲60分鐘,用戶只是在用戶界面上懸停並鍵入內容,但從未按下回車鍵或該時間段內的任何按鈕,他們終於面臨會話超時。但是,這真的是你的應用程序的場景? –

+0

這是一種邊緣情景。目前,用戶似乎正在獲取會話時間,同時還需要填寫一些難以填寫的表單。 – SashikaXP