GWT-历史第一标记的问题

GWT-历史第一标记的问题,gwt,history,gwt-history,Gwt,History,Gwt History,我有一个问题:当我调用Content类(由于#param而决定查看哪个页面的类)时,我会执行以下操作: History.addValueChangeHandler(this); if(!History.getToken().isEmpty()){ changePage(History.getToken()); } else { History.newItem("homepage"); } 所以,现在,如果我看一下浏览器的导航栏,我会看到http://localhost:8084

我有一个问题:当我调用Content类(由于#param而决定查看哪个页面的类)时,我会执行以下操作:

History.addValueChangeHandler(this);
if(!History.getToken().isEmpty()){
    changePage(History.getToken());
} else {
    History.newItem("homepage");
}
所以,现在,如果我看一下浏览器的导航栏,我会看到
http://localhost:8084/GWT/?gwt.codesvr=127.0.0.1:9997#homepage
。没错。不幸的是,如果我在浏览器上按
Back
,我会看到它加载了以前的地址,例如
http://localhost:8084/GWT/?gwt.codesvr=127.0.0.1:9997

我在开头有一个“假”页面

1-我如何修复它?并使用默认令牌启动应用程序,或将其从历史记录中删除。或者,当存在空令牌时,只需调用
onValueChange
方法,然后使用一种开关/if-else来决定工作流

2-作为相关问题,当我调用
History.addValueChangeHandler(this)时
在costructor类中,netbeans说“在构造函数中泄漏这个”。这意味着什么

干杯

IMHO,主页url以“proto://hostname#homepage“很难看:)

1.
只是一个建议:

String token = History.getToken();
String page = token.isEmpty() ? "homepage" : token;
changePage(page);
2.
您的入口点是否实现了
ValueChangeHandler

IMHO,以proto://hostname#homepage“很难看:)

1.
只是一个建议:

String token = History.getToken();
String page = token.isEmpty() ? "homepage" : token;
changePage(page);

2.
您的入口点是否实现了
ValueChangeHandler

可能您忘记添加
历史记录。fireCurrentHistoryState()
onModuleLoad()
方法的末尾?

可能您忘记添加
历史记录。fireCurrentHistoryState()
要结束
onModuleLoad()
方法?

您需要设置历史标记并使用当前标记触发历史更改事件。 以下是你可以做到的:

/ If the application starts with no history token, redirect to a new
// 'homepage' state.
String initToken = History.getToken();
if (initToken.length() == 0) {
  History.newItem("homepage");
}

// Add widgets etc


// Add history listener
History.addHistoryListener(yourHistoryHandler);

// Fire the initial history state.
History.fireCurrentHistoryState();

您需要设置历史标记并使用当前标记触发历史更改事件。 以下是你可以做到的:

/ If the application starts with no history token, redirect to a new
// 'homepage' state.
String initToken = History.getToken();
if (initToken.length() == 0) {
  History.newItem("homepage");
}

// Add widgets etc


// Add history listener
History.addHistoryListener(yourHistoryHandler);

// Fire the initial history state.
History.fireCurrentHistoryState();

谢谢你的回答。嗯,不是真的。我实现了我的内容(流面板)可以更改的接口。是不是错了?还有一件事需要考虑:如果没有特殊的iframe,internet explorer无法正确处理历史状态,而iframe应该合并到index.html部分。第二,您应该将[1]包装到方法中,并在页面加载时调用它(正如其他人已经指出的),谢谢您的回答。嗯,不是真的。我实现了我的内容(流面板)可以更改的接口。是不是错了?还有一件事需要考虑:如果没有特殊的iframe,internet explorer无法正确处理历史状态,而iframe应该合并到index.html部分。第二,您应该将[1]包装到方法中,并在页面加载时调用它(正如其他人已经指出的),事实上,我没有直接在onModuleLoad()上调用历史记录,但在另一个类上,当onModuleLoad启动时,“added”。这是个问题吗?是的,我从未调用过该方法……事实上,我没有直接在onModuleLoad()上调用历史记录,但在另一个类上,当onModuleLoad启动时,“添加”。这是个问题吗?是的,我从来没有调用过这个方法……需要调用fireCurrenthistoryState()吗??如果您调用History.newItem(“test”),它只需要在第一次调用History.newItem(“test”)时从任何其他类调用,就像在第一次调用之后一样。没有必要再次调用FiRealNethistRySt[()。为什么??考虑用户直接尝试在Web应用程序中打开URL的情况,比如说。在此场景中,历史标记的初始值将为#设置。不用说,当您稍后在代码中附加HistoryListener时,它不会捕获初始历史标记,因为从未触发历史更改。因此,,启动应用程序的当前历史记录状态总是更好的,以确保您的历史记录更改侦听器已收到它。嘿,刚刚收到它…如果您的历史记录处理程序未首先加载,那么..您需要调整当前历史记录令牌…一旦历史记录处理程序加载,则需要启动当前历史记录以了解需要调用什么fireCurrenthistoryState()??如果您调用History.newItem(“test”),它只需要在第一次调用History.newItem(“test”)时从任何其他类调用,就像在第一次调用之后一样。没有必要再次调用FiRealNethistRySt[()。为什么??考虑用户直接尝试在Web应用程序中打开URL的情况,比如说。在此场景中,历史标记的初始值将为#设置。不用说,当您稍后在代码中附加HistoryListener时,它不会捕获初始历史标记,因为从未触发历史更改。因此,最好触发应用程序的当前历史状态,以确保您的历史更改侦听器已收到它。hey刚收到它…如果您的历史处理程序未先加载,则..您需要优化当前历史标记…一旦加载历史处理程序,则需要触发当前历史标记