2012-08-02 40 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并调用其他事件。现在我不能在那里放一些代码。