2012-06-04 72 views
0

我在onModuleLoad我的應用程序下面的代碼():GWT-RPC延遲窗口刷新

Window.addWindowClosingHandler(new ClosingHandler() { 
     @Override 
     public void onWindowClosing(ClosingEvent event) { 
      event.setMessage("If you choose to close, application will sign out"); 
     } 
    }); 

    //sign out on close 
    Window.addCloseHandler(new CloseHandler<Window>() { 
     @Override 
     public void onClose(CloseEvent<Window> event) { 
      sendLogout(); 
     } 
    }); 

的sendLogout()函數如下:

// Set up the callback object. 
    AsyncCallback<String> callback = new LogoutCallback(this); 
    // Make the call to the survey service. 

    SurveySystemService.Util.getInstance().logout(details, callback); 

其中 '細節'是一些對象。

當窗口關閉時它工作得很好,但如果我嘗試刷新頁面,它不會註銷。我的想法是,由於調用是異步的,在模塊重新啓動之前,它不會完成將消息傳遞到服務器。我試過了: 1.在onClose方法中創建並調用回調函數。 2.使用定時器來檢查是否有呼叫。 3.檢查與上述相同的無盡的廁所(我絕望)。

在所有這些解決方案中,程序都會到達回調創建,但服務器從未收到任何東西。

對此有何幫助?

回答

0

您是否可以在首次加載頁面時調用註銷。由於網絡的無狀態特性,GWT應用程序不會知道某人正在刷新或僅導航到頁面。

您可以在會話存儲中存儲一個ID變量,該變量應保留,直到關閉瀏覽器窗口或選項卡。如果在應用程序啓動時會話存儲中存在ID變量,則可以使用它來觸發註銷。

+0

我最終使用Cookies來做你的建議,它的工作原理,謝謝!我從這個項目中學到的一個教訓是,gwt-rpc是魔鬼:P – AoGenius