2012-08-02 63 views
1

我試圖運行一些RPC調用,當用戶關閉窗口,刷新它或點擊後退按鈕只爲一個單一的頁面。我發現一個帖子談論處理,但該解決方案是不是在網絡上運作良好,缺少後退按鈕處理程序(不工作),並始終是所有頁面,如果你從一個頁面離開,我無法找到的東西刪除處理GWT回句柄,刷新,關閉按鈕

Window.addWindowClosingHandler(new Window.ClosingHandler() { 

       @Override 
       public void onWindowClosing(ClosingEvent event) { 
        event.setMessage("You sure?"); 
       } 
      }); 

    Window.addCloseHandler(new CloseHandler<Window>() { 

       @Override 
       public void onClose(CloseEvent<Window> event) { 

        // Execute code when window closes! 
       System.out.println("ble ! "); 

       } 
      }); 

框架:GWT 2.4 mvp4g。
瀏覽器:FF和Chrome。

+0

「不工作」不是對問題的描述。什麼不工作?任何錯誤?代碼沒有被調用? http://stackoverflow.com/faq#howtoask – Strelok 2012-08-03 01:53:15

+0

按下後退按鈕不顯示消息對話框,多數民衆贊成在不工作,不像關閉瀏覽器/選項卡,更改URL或刷新觸發對話框。 – gfelmer 2012-08-03 13:57:09

回答

0

你需要,當你離開的頁面,然後當你再次進入頁面重新添加刪除的處理程序。你有上面代碼覆蓋的「添加」一面,你缺少「刪除」部分。您可以使用從add*Handler方法返回的HandlerRegistration對象執行此操作。如果要刪除已註冊的處理程序,您只需調用HandlerRegistration.removeHandler()方法:

HandlerRegistration windowClosingHandler = Window.addWindowClosingHandler(new ClosingHandler() { 
    @Override 
    public void onWindowClosing(ClosingEvent event) { 
     // Handle window closing 
    } 
}); 
// From now on the CloseHandler will be fired 

// ... 
// Somewhere else: 
windowClosingHandler.removeHandler(); 
// From now on the CloseHandler won't be fired 
+0

Igor,removeHandler它的工作,但當用戶點擊後退按鈕方法onClose(CloseHandler)不執行,我不能刪除處理程序。 – gfelmer 2012-08-03 16:06:33

1

,因爲我使用mvp4g框架我找到了解決辦法在那裏,你需要與CyclePresenter擴展您的主持人和覆蓋的onLoad和onunload的方法。當視圖從DOM中加載/卸載時,這些方法會觸發,我測試併爲所有情況工作,f5,後退按鈕,關閉瀏覽器/選項卡,轉到其他Web並調用其他事件。現在我不能在那裏放一些代碼。