2014-10-10 81 views
0

我有一個使用GWT的網站,該網站使用Spring進行保護,超時時間爲...假設一個小時。作爲該過程的一部分,我試圖在會話過期前5分鐘實施客戶端會話超時警告。如何在任何異步RPC調用時調用GWT方法

我已經爲它寫出了使用cookies的Javascript。定時器的工作原理是初始化定時器,並且有一個方法可以通過本地方法重置可以在GWT中使用的定時器。

function resetSessionTimeout() { //update the cookie for the expected timeout 
    var date = new Date(); 
    var timeoutTime = 55 * 60 * 1000; 
    date.setTime(date.getTime() + timeoutTime); 
    createCookie('timeout', date.getTime(), 1); 
} 

每當一個RPC是對服務器進行,​​基於服務器的會話超時被刷新,所以最初的計時器不再使用任何類型的異步調用後準確。上面的函數會用正確的超時時間更新客戶端。

絕對可行的選項是調用一個本機無效,它調用$wnd.resetSessionTimeout()每一種方法我有異步調用。然而,這是很多方法,並且可擴展性差,執行性差。

有沒有辦法讓我設置客戶端部分來觀察每一個RPC已經被創建和接收,然後把原生的void放在MVP級別而不是每個方法,即是否存在RPC Observers或聽衆?

回答

1

你可以這樣做:

public class MyCallback<T> implements AsyncCallback<T> { 

    public MyCallback() { 
    } 

    @Override 
    public void onFailure(T result) { 
     /* 
     * Show standard error message. You can override it 
     * with a more specific message where necessary. 
     */ 
    } 

    @Override 
    public void onSuccess(T result) { 
     execute(result); 
     // Call your timer, etc. 
    } 

    protected void execute(T result) { 
     // Override this method when making calls. 
    } 
} 

現在你可以替換myCallBack函數所有的AsyncCallback對象。作爲額外的獎勵,你不必每次都忽略onFailure,除非你想要一個特定的錯誤信息。

+0

哇,我從來沒有想過這樣做。那麼,重新連線一切,以覆蓋執行,而不是onSuccess將需要一段時間,但這顯着改善處理。謝謝!我認爲另一種方法是在構造函數中調用更新,然後讓onFailure重置計時器。 – Compass 2014-10-10 19:57:41