参数化GWT应用的最佳实践是什么?

6
我有一个基于Google Web Toolkit (GWT)的应用程序,当我链接到它时,我想传递一些参数,以便它可以动态地检索数据。例如,如果它是一个股票图表应用程序,我想让我的链接包含该股票的符号,并让GWT应用程序读取它并向某些股票服务发出请求。例如,http://myapp/gwt/StockChart?symbol=GOOG 将是我的StockChart GWT应用程序的链接,它将向我的股票信息Web服务请求GOOG股票的信息。
到目前为止,我一直使用服务器端代码向页面添加JavaScript变量,然后使用JSNI(JavaScript本机接口)读取这些变量。
例如:
在主机HTML中:
<script type="text/javascript">
  var stockSymbol = '<%= request.getParameter("symbol") %>';
</script>   

在GWT代码中:
public static native String getSymbol() /*-{
    return $wnd.stockSymbol;
}-*/;

尽管这段代码基于实际可行的代码,但我已为此问题进行了修改,因此可能出现错误。

然而,在托管模式下(特别是在处理数组时),这种方法并不总是有效,而且由于JSNI在1.4版本及以前不存在,我猜测还有其他/更好的方法。

2个回答

10

如果您想从请求中读取查询字符串参数,您可以使用com.google.gwt.user.client.Window类:

// returns whole query string 
public static String getQueryString() 
{
    return Window.Location.getQueryString();
}

// returns specific parameter
public static String getQueryString(String name)
{   
    return Window.Location.getParameter(name);
}   

对于GET请求很有效。那POST参数怎么办?例如,如果我想一次请求200个股票符号,我不希望它们都显示在URL中。 - KC Baltz
3
我建议创建一个小部件,根据某些参数进行操作。您肯定不想使用POST/GET构建页面,而是基于发送到页面的XML(远程过程调用)进行构建,并在客户端解析它以创建所有小部件。小部件然后单独调用服务器以获取要显示的数据。 - Drejc
请注意,您必须适应GWT(RPC)异步(AJAX)的工作方式。 GET和POST应仅用于影响某些全局行为(例如语言选择),因为它会重新加载整个页面。 - Drejc
这真的是一个引导问题。一旦应用程序加载完成,我就会使用GWT RPC或HTTP请求(如果不可用)。这个问题的动机来自我的当前项目,它是一个根据用户选择显示项目的应用程序。对于大量选项,POST是一个自然的选择。 - KC Baltz
是的,这是一个很好的解决方案,特别是当您想要为Facebook、G+或Google爬虫创建HTML版本以获取信息,并且希望用户在单击链接时进入真正的GWT页面。顺便问一下,您如何检测它是Facebook还是想查看链接的用户?我想使用“用户代理”信息,但这意味着我必须放置所有可能的浏览器值,并忽略我不理解的爬虫?... - Zied Hamdi

1

使用哈希值“参数化”GWT应用程序也是一个不错的选择。

因此,可以使用哈希值代替

 http://myapp/gwt/StockChart?symbol=GOOG

使用

 http://myapp/gwt/StockChart#symbol=GOOG

对于这种“参数”,GWT的历史机制提供了一些不错的工具支持。


您不能通过重定向发送哈希 URL。 - Zied Hamdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接