GWT-历史第一标记的问题
我有一个问题:当我调用Content类(由于#param而决定查看哪个页面的类)时,我会执行以下操作: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
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刚收到它…如果您的历史处理程序未先加载,则..您需要优化当前历史标记…一旦加载历史处理程序,则需要触发当前历史标记