我在我的应用程序上实现了一个 jQuery 小部件。我希望在加载时,小部件启动,为了做到这一点,我必须用一个参数调用我的 url。
所以,它会像这样 MYURL/?param=value
我现在正在这样做:
Window.Location.replace(GWT.getHostPageBaseURL()+"?param=value");
并且工作正常,问题是重新加载应用程序。
有没有办法在不刷新我的网页的情况下做到这一点?
感谢!
为了不重新加载页面,您必须只修改哈希片段而不是查询字符串。
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中。
正如 Philippe Beaudoin(我认为他为 Google 工作)所说,使用 Window.location 不是正确的方法:
据我了解,浏览器不支持修改浏览器 URL 而不在历史记录中插入令牌。GWTP 0.4 不会触及 URL(而 0.3 触及它,迫使您在历史记录中插入一个新元素)。调用 updateHistory() 应该与 0.3 具有完全相同的效果。
我记得有些人说他们能够修改 URL,而无需插入历史令牌,也无需通过使用带有修改后的哈希片段的当前 url 调用 Window.Location.replace() 来重新加载应用程序。但是,这没有记录在案,如果它适用于所有浏览器,我会感到惊讶。
来源:https ://groups.google.com/forum/#!topic/gwt-platform/glnowOS_8CM
在 GWTP 中,您可以非常轻松地做到这一点。
在 GWTP 中,当你使用 eClipse 创建演示者时说 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
希望这可以帮助你