我在我的应用上实现了一个jQuery小部件。我希望在加载时,小部件启动,并且为了使我必须使用一个参数调用我的URL。
所以,就像这个MYURL /?param = value
我现在正在做这件事:
Window.Location.replace(GWT.getHostPageBaseURL()+"?param=value");
工作正常,问题是重新加载应用程序。
有没有办法在不刷新我的网页的情况下执行此操作?
感谢!
答案 0 :(得分:4)
为了不重新加载页面,您只需要修改散列片段而不是查询字符串。
Window.Location.replace(
Window.Location.getPath() + Window.Location.getQueryString() +"#whatever");
在大多数浏览器中,有一种名为pushState的新机制,因此您可以在不重新加载页面的情况下将URL更改为任何值。 GWT还没有任何包装器,但您可以通过JSNI使用它,或者如果您希望使用此代码将gwtquery添加到项目中:
import static com.google.gwt.query.client.GQuery.*;
Properties history = JsUtils.prop(window, "history");
JsUtils.runJavascriptFunction(history,
"pushState", null, null, "whatever.html?foo=true");
仅供参考,新的gwtproject网站在浏览菜单时使用此机制和gwtquery。源代码位于gwt git。
答案 1 :(得分:1)
使用Window.location不是一个正确的方法,因为Philippe Beaudoin(我认为他在谷歌工作)说:
据我所知,修改浏览器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)有助于管理所有要放置的东西,例如param访问,添加mor param而不刷新页面。
在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来管理一个非常复杂的网络应用程序,因为Gwt太有限了。仅适用于小型应用,但大型网络应用需要强大的框架和那就是Gwtp。 Stackoverflow中没有多少人知道Gwtp,所以很难得到答案,但你可以通过观看视频来学习它。
在youtube上有一个非常好的视频供您学习GWTP:
http://www.youtube.com/watch?v=Gm-RO-cmsEQ&list=PL29DDDC847F63AF82
希望这可以帮助你