В GWT, как сбросить URL, когда пользователь нажимает «Отмена» в диалоговом окне подтверждения навигации? - PullRequest
4 голосов
/ 01 марта 2010

В моем приложении GWT я хочу запросить подтверждение у пользователя, когда он выходит из текущего приложения, , т.е. , введя URL-адрес или закрыв браузер. Обычно это делается путем регистрации ClosingHandler и установки нужного диалогового сообщения в методе onWindowClosing. Кажется, это хорошо работает.

Однако, если пользователь пытается перейти, скажем, к http://www.gmail.com (набрав его в строке URL) и нажимает Отмена , чтобы указать, что он не хочет перемещаться, тогда мое приложение продолжает работать, но в адресной строке браузера постоянно отображается http://www.gmail.com. Это вызывает ряд проблем позже в моем приложении и даст неверный результат, если пользователь добавит страницу в закладки.

Есть ли способ автоматического сброса URL, когда пользователь нажимает Отмена ?

Или, альтернативно, есть ли способ обнаружить, что пользователь нажал кнопку Отмена ? Если это так, есть ли способ установить URL, не вызывая ValueChangeEvent? (Я мог бы добавить некоторую логику, чтобы предотвратить это, но я бы предпочел использовать встроенный механизм, если он существует.)

Ответы [ 3 ]

3 голосов
/ 01 марта 2010

Не уверен, что это работает, но вы пытались: History.newItem(History.getToken(), false); сбросить URL? Он устанавливает маркер истории, не вызывая новый элемент истории.

1 голос
/ 01 марта 2010

Мне удалось это сделать. Похоже, что 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() каждый раз, когда меняется маркер истории.

0 голосов
/ 10 июня 2016

Я решил эту проблему, создав собственный 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); }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...