【问题标题】:Best practice for parameterizing GWT app?参数化 GWT 应用程序的最佳实践?
【发布时间】:2012-08-24 05:26:21
【问题描述】:

我有一个 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 版和之前的版本中,我猜还有另一种/更好的方法。

【问题讨论】:

    标签: gwt


    【解决方案1】:

    如果您想从请求中读取查询字符串参数,您可以使用 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 中
    • 我建议创建一个根据某些参数起作用的小部件。您当然不想使用 POST/GET 构建您的页面,将其构建在 XML 发送到页面 (RPC) 并在客户端上解析以创建所有小部件。然后小部件单独调用服务器以显示数据。
    • PS:你必须习惯 GWT (RPC) 异步 (AJAX) 的做​​事方式。 GET 和 POST 仅应用于影响某些全局行为(例如语言选择),因为它会重新加载整个页面。
    • 这确实是一个引导问题。加载应用程序后,如果不可用,我将使用 GWT RPC 或 HTTP 请求。这个问题是由我当前的项目激发的,该项目是一个基于用户选择显示项目的应用程序。 POST 有多种物品可供选择。
    • 是的,这是一个很好的解决方案,尤其是当您想要一个用于 facebook、G+ 或 google 爬虫的 HTML 版本以从中获取信息并且您希望用户在点击时访问真正的 GWT 页面链接。顺便说一句,您如何检测它是 facebook 还是想要查看链接的用户?我虽然使用“用户代理”信息,但这意味着我必须输入浏览器的所有可能值,并忽略我不理解的爬虫? ...
    【解决方案2】:

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

    所以,而不是

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

    使用

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

    通过GWT's History Mechanism 为此类“参数”提供了一些不错的工具支持。

    【讨论】:

    • 您不能通过重定向发送散列网址
    猜你喜欢
    • 2011-04-12
    • 2014-05-13
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2010-09-13
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多