2011-08-01 89 views
1

你如何處理GWT應用程序中的超時請求? 這裏是我的web.xml文件的文檔片斷:如何處理會話超時異常(使用MVP Places和Activities)?

<session-config> 
<session-timeout>30</session-timeout> 
</session-config> 

我的GWT項目是基於MVP活動和地點。 每當用戶等待超過30mn,我想顯示一個彈出窗口並將用戶重定向到登錄頁面。以下是我對 做的所有RPC服務:

public void onFailure(Throwable caught) { 
    ... 
    if (caught instanceof InvocationException) { 
        { 
         Window.alert("Time out de session. Veuillez vous reconnecter. 2"); 
         Window.open(GWT.getHostPageBaseURL() + "identification.html", "_self", null); 
         return; 
        } 
    ...} 

它的工作原理,但幾件事情很煩人: 1)捕捉到的異常應該是RequestTimeoutException。但它沒有被捕獲,這就是爲什麼我使用InvocationException來代替。 它怎麼沒被抓到? 2)如何以更通用的方式處理這個異常?在所有的RPC服務中都需要捕捉異常... 我讀到了一些AsyncCallbackAdapter類... 3)現在我只處理RPC服務,但是當然超時異常無處不在:鏈接,按鈕,頁面刷新... 我正在使用MVP Places and Activities。 當用戶試圖去某個地方時,是否有辦法捕獲該異常?

感謝您的幫助

回答

2
  1. RequestTimeoutException當服務器不響應異常。

  2. 您應該創建自己的檢查異常,如SessionTimeoutException,並在客戶端代碼中處理它。 GWT知道如何處理(連載)checked異常,並將其傳遞到您的客戶端代碼:http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html#exceptions

    要在應用程序範圍的方式處理這個問題,你可以連接到RPC機制,通過創建你的遠程服務自己的發電機:How to redirect to login page after session expire in GWT RPC call

  3. 最簡單的方法(不更改所有現有的代碼)將設置一個Timer定期檢查(每隔幾分鐘)服務器會話。當會話超時顯示模式DialogBox(阻止其他小部件上的用戶輸入)通知用戶他/她需要再次登錄。