2015-10-11 2 views
0

У меня возникла проблема с переходом вперед. В принципе, когда пользователь находится на странице и внес изменения без сохранения, а затем нажимает кнопку «назад» или «вперед», они отображаются с подсказкой и двумя вариантами: «Оставить» или «Остаться».Кнопка переадресации GWT

Я внедрил обратную кнопку в порядке, и выбор останова на странице хорошо работает, используя History.newItem (currentToken) - кнопка «Назад» по-прежнему доступна для кликов.

Однако с помощью кнопки форварда, если я использую History.newItem (currentToken), он переносит это на передний край стека истории, и кнопка «вперед» больше не может быть нажата. History.replaceItem (currentToken) вызывает ту же проблему.

Как обработать отмену действия форварда, чтобы я остался на текущей странице, но кнопка форварда по-прежнему включена?

@Override 
public void onValueChange(ValueChangeEvent<String> event) { 
    logger.info("back button pressed: " + event.getValue()); 

    String evenVal = event.getValue(); 
    String token = History.getToken(); 

    AbstractPresenter presenter = sessionKiosk.getCurrentlyShowingPresenter(); 
    if (presenter instanceof NSRCommonWorksheetPresenter && sessionKiosk.isDirty()) { 
    ((NSRCommonWorksheetPresenter)presenter).setHistoryToken(event.getValue()); 
    ((NSRCommonWorksheetPresenter)presenter).showUnsavedChangesLeavingPageDialog(); 
    } 
    else { 
    handleHistoryEvent(event.getValue()); 
    } 
} 

Диалоговое окно отображается, и когда я нажимаю кнопку «Оставаться на странице», вызывается следующее.

public void stayOnCurrentPage() { 
    if (eventMap.get(prevPage) != null) { 
    History.newItem(prevPage, false); 
    } 
} 

Обновление: В основном history.newItem (значение) удаляет использование кнопки «вперед». Есть ли другой способ отменить мероприятие? Если я просто ничего не делаю, страница останется там, где я хочу, но url все еще обновляет

Ни один из 3 вариантов в инструкции else не работает. Спасибо.

+0

Просим вас выслать ваш код. –

ответ

1

Вы можете просто отменить мероприятие, не касаясь истории или жетонов.

UPDATE:

Как видно из кода, который вы не пересекающей событие (обратно кнопки вперед/назад), но пусть это пройти, получить новый маркер, а затем заставить вернуться к предыдущему состоянию под определенные обстоятельства.

Я предлагаю использовать шаблон Activities and Places, где каждое «место» в вашем приложении имеет соответствующую «активность». Каждое действие в вашем приложении будет реализовывать интерфейс GWT Activity, который включает в себя метод mayStop(). Этот метод называется до пользователь переходит от определенного места в вашем приложении, предоставляя вам возможность предупредить пользователя и, при необходимости, отменить навигацию.

В целом, этот шаблон предлагает очень надежную поддержку механизма истории, охватывающий многие варианты использования.

Если вы хотите самостоятельно поддерживать механизм Истории, взгляните на PlaceChangeRequestEvent - это позволяет предупредить пользователя, который пытается перейти от места в вашем приложении.

+0

Как просто отменить его? – gOrion

+0

Дополнительная информация: мы используем HandlerManager, а не SimpleEventBus. Я показал метод onValueChanged - не перехватывает ли это событие? – gOrion