GWT前进按钮

时间:2015-10-11 21:31:19

标签: gwt browser-history

我在处理前进按钮时遇到问题。 基本上,当用户在页面上并且在没有保存的情况下进行更改时,按下向后或向前按钮会向他们显示提示和两个选项:离开或停留。

我已经实现了向后按钮,使用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(value)删除了使用前进按钮。还有其他方法可以取消活动吗?如果我什么都不做,那么页面会保留在我想要的位置,但网址仍会更新

else语句中的3个选项都不起作用。 感谢。

1 个答案:

答案 0 :(得分:1)

您可以在不触及历史记录或代币的情况下取消活动。

更新:

从您的代码中可以看出,您没有拦截事件(后退/前进按钮),但让它通过,获取新令牌,然后在某些情况下强制返回上一个状态。

我建议使用Activities and Places模式,每个&#34;地点&#34;在您的应用中有一个相应的&#34;活动&#34;。您应用中的每项活动都会实施GWT Activity界面,其中包含mayStop()方法。在用户导航离开应用中的特定位置之前,此方法称为,这样您就有机会警告用户并在必要时取消导航。

通常,此模式为历史机制提供了非常强大的支持,涵盖了许多用例。

如果您想自己支持历史记录机制,请查看PlaceChangeRequestEvent - 它可以让您警告试图远离应用中某个位置的用户。