我可以在没有提交的情况下更改网址(设置参数)吗? 我发现了这种方法 http://google-web-toolkit.googlecode.com/svn/javadoc/2.1/com/google/gwt/user/client/Window.Location.html#replace%28java.lang.String%29 但它提交页面。所有GWT状态都将丢失。
答案 0 :(得分:10)
如果您想要更改散列中没有的内容,例如您想要更改URL中的参数,您可以这样做!
private void someMethod() {
String newURL = Window.Location.createUrlBuilder().setParameter("someParam", "someValue").buildString();
updateURLWithoutReloading(newURL);
}
private static native void updateURLWithoutReloading(String newUrl) /*-{
$wnd.history.pushState(newUrl, "", newUrl);
}-*/;
然后你可以使用后面和前面的浏览器按钮注册一个处理用户的功能,如所示here。
答案 1 :(得分:7)
你为什么要这样做?一般来说,GWT应用程序不会更改页面 - 因此它们通常是 SPA (单页应用程序)
从服务器加载新页面时,您将丢失该页面上的状态。您可以更改URL的哈希部分,因为它不会返回到服务器,如下所示:
String newURL = Window.Location.createUrlBuilder().setHash("newhash").buildString();
Window.Location.replace(newURL);
但是,如果您打算这样做,我建议您查看GWT的MVP框架,该框架内置支持使用哈希令牌管理位置。
http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html
答案 2 :(得分:2)
$wnd.history.pushState(newUrl, "", newUrl);
在HTML5浏览器中运行良好。不在IE8或IE9中!