在GWT中,如何在用户点击导航确认对话框中的“取消”时重置URL?

时间:2010-03-01 18:11:26

标签: java gwt

在我的GWT应用程序中,我想通过输入URL或关闭浏览器,在用户导航出当前应用程序即。时询问用户确认。这通常通过注册ClosingHandler并在onWindowClosing方法中设置所需的对话框消息来完成。这似乎运作良好。

但是,如果用户尝试导航到http://www.gmail.com(通过在网址栏中输入)并点击取消以表示他不想导航,那么我的应用继续运行但浏览器的URL栏一直显示http://www.gmail.com。这会在我的应用程序中导致许多问题,如果用户为该页面添加书签,则会给出错误的结果。

当用户按取消时,是否有办法自动重置网址?

或者,有没有办法检测用户按下取消按钮?如果是这样,有没有办法设置网址而不会触发ValueChangeEvent? (我可以添加一些逻辑来防止这种情况,但如果它存在,我宁愿使用内置机制。)

3 个答案:

答案 0 :(得分:3)

不确定这是否有效,但您是否尝试:History.newItem(History.getToken(), false);重置网址?它会设置历史记录而不会触发新的历史记录项。

答案 1 :(得分:1)

我设法做到了这一点。看起来GWT DeferredCommand在确认窗口关闭后执行。结合希尔布兰德的上述答案,这正是我想要的。这正是我的所作所为:

  public final void onWindowClosing(Window.ClosingEvent event) {
    event.setMessage(onLeaveQuestion);
    DeferredCommand.addCommand( new Command() {
      public void execute() {
        Window.Location.replace(currentLocation);
      }
    });
  }

每次历史记录标记更改时,通过调用currentLocation获取Window.Location.getHref()

答案 2 :(得分:0)

我通过创建自定义PlaceController并替换url中的标记来解决这个问题。不是一个理想的解决方案,但它有效!

if (warning == null || Window.confirm(warning)) { where = newPlace; eventBus.fireEvent(new PlaceChangeEvent(newPlace)); currentToken = History.getToken(); } else { // update the url when user clicks cancel in confirm popup. History.replaceItem(currentToken, false); }