正如 Philippe Beaudoin(我认为他为 Google 工作)所说,使用 Window.location 不是正确的方法:
据我了解,修改浏览器 URL 而不插入
浏览器不支持历史记录中的令牌。 GWTP 0.4 不会
触摸 URL(而 0.3 触摸它,迫使您插入一个新的
历史上的元素)。调用 updateHistory() 应该有确切的
效果和0.3一样。
我记得有些人说他们可以修改网址
无需插入历史令牌,也无需重新加载应用程序
使用当前 url 调用 Window.Location.replace()
修改后的哈希片段。但是,这没有记录在案,我会
如果它可以在所有浏览器上运行,您会感到惊讶。
来源:https://groups.google.com/forum/#!topic/gwt-platform/glnowOS_8CM
在 GWTP 中,您可以非常轻松地做到这一点。
在GWTP中,当你使用eClipse创建Presenter说FirstPresenter时,eClipse会为你生成所有需要的类,这些类是:FirstPresenter.java, FirstView.java, FirstView.ui.xml
Gwtp 中有一些包 (urproject.client.place) 可以帮助管理 Place 的所有内容,例如参数访问,添加 mor 参数而不刷新页面。
在 FirstPresenter.java 中,你首先需要注入 PlaceManager(把它放在方法之外)然后创建一个函数说 addParam(String myParam):
@Inject PlaceManager placeManager;
public void addParam(String myParam, String myValue){
PlaceRequest request = new PlaceRequest(NameTokens.yourNameToken).with(myParam, myValue);
placeManager.updateHistory(request, true);
}
注意:如果您想要>1 个参数,您可以使用任意数量的.with 任意数量的.with(myParam, myValue).with(myParam2, myValue2)。您可以通过String val=request.getParameter(myParam,""); 获取参数。如果您想在页面初始化时获取参数,请使用:
@Override
public void prepareFromRequest(PlaceRequest request){
super.prepareFromRequest(request);
String myVal=request.getParameter("myParam", "");
}
就这样搞定了。您必须使用 Gwtp 包才能使用该功能,Gwtp 是我能推荐的最好的框架,它们有很多强大的东西。您不能仅使用 Gwt 来管理非常复杂的 Web 应用程序,因为 Gwt 太有限且仅适用于小型应用程序,但大型 Web 应用程序需要强大的框架,即 Gwtp。 Stackoverflow 中没有多少人知道 Gwtp,所以很难得到答案,但你可以通过观看视频来学习。
这里有一个非常好的视频供你在 youtube 上学习 GWTP:
http://www.youtube.com/watch?v=Gm-RO-cmsEQ&list=PL29DDDC847F63AF82
希望对你有帮助