SmartGwt - 从JSON加载网格数据

时间:2010-10-07 20:40:43

标签: smartgwt

我正在尝试使用SmartGwt。我正在使用XJSONDatasource对SmartClient中具有JSON数据的示例页面进行跨域调用。但是,当我运行代码时,会出现一个弹出窗口,上面写着“查找符合您标准的记录......”这种情况永远不会消失,并且数据未加载。我正在使用SmartGwt的免费版本(我的公司已经说过这就是我们将要使用的)。希望我只是遗漏了一些明显的东西。

    DataSource dataSource = new XJSONDataSource();
    dataSource.setDataTransport(RPCTransport.SCRIPTINCLUDE);
    dataSource.setDataFormat(DSDataFormat.JSON);

    dataSource.setDataURL("http://www.smartclient.com/smartgwt/showcase/data/dataIntegration/json/contactsData.js");
    DataSourceTextField nameField = new DataSourceTextField("name", "name");

    nameField.setValueXPath("name");

    dataSource.setFields(nameField);

    ListGrid grid = new ListGrid();
    grid.setDataSource(dataSource);
    grid.setWidth100();
    grid.setHeight(100);
    grid.setAutoFetchData(true);
    grid.draw();

2 个答案:

答案 0 :(得分:4)

我从文档中看到:http://www.smartclient.com/smartgwt/javadoc/com/smartgwt/client/data/XJSONDataSource.html

  

注意,如教程中所示   以上,服务器负责   不仅写出数据,而且写出来   也是一个JavaScript函数调用   告诉客户端响应有   到达。客户端传递的名称   被称为“回调”的函数   网址参数。

但是您在www.smartclient.com/smartgwt/showcase/data/dataIntegration/json/contactsData.js链接页面的代码中没有这样的回调

答案 1 :(得分:3)

当您的smartGWT数据源调用此URL时:

http://www.smartclient.com/smartgwt/showcase/data/dataIntegration/json/contactsData.js

(如果您的数据源正在调用Java App,请转到此答案的底部)

您的数据源将发出的请求将包含一个名为callback的GET参数,如下所示:

callback=isc.Comm._scriptIncludeReply_0

脚本contactsData.js需要捕获此GET参数。

contactsData.js需要包含一个库来从URL中检索参数:

javascript检索参数功能:

function getParameter ( queryString, parameterName ) {
   // Add "=" to the parameter name (i.e. parameterName=value)
   var parameterName = parameterName + "=";
   if ( queryString.length > 0 ) {
      // Find the beginning of the string
      begin = queryString.indexOf ( parameterName );
      // If the parameter name is not found, skip it, otherwise return the value
      if ( begin != -1 ) {
         // Add the length (integer) to the beginning
         begin += parameterName.length;
         // Multiple parameters are separated by the "&" sign
         end = queryString.indexOf ( "&" , begin );
      if ( end == -1 ) {
         end = queryString.length
      }

jQuery检索参数功能

http://ajaxcssblog.com/jquery/url-read-request-variables/

获得回调参数的值后,您将使用JSON作为响应正文中的参数来编写函数名称,如下所示:

isc.Comm._scriptIncludeReply_0({"item": [ {"id": "1","name": "Monkey"}, 
{"id": "2","name": "Tree"}, 
{"id": "3","name": "Banana"} ] })

所以javascript代码看起来像这样:

Response.Write(getParameter(URLrequestFromDatasourceString,"callback") + " ( " + JSON + " )" );

<强> JAVA

如果您的smartGWT数据源调用Java应用程序URL:

http://www.smartclient.com/getJson.htm

您的Java控制器将执行相同的操作但更容易

String callbackString = request.getParameter("callback");

response.setContentType("text/X-JSON");
response.getWriter().write( callbackString + " ( " + JSONstring + " ) " );
response.setStatus(HttpServletResponse.SC_OK);  

Also, here is a link to a blog post on the issue