首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >smartGWT ListGrid JSON问题

smartGWT ListGrid JSON问题
EN

Stack Overflow用户
提问于 2013-02-01 18:29:36
回答 2查看 2K关注 0票数 0

我在URL:http://localhost:8888/rest/contacts上创建了一个REST API,输出如下:

代码语言:javascript
复制
{
    "contact": {
        "address": [
            {
                "city":"Shanghai",
                "street":"Long Hua Street"
            },
            {
                "city":"Shanghai",
                "street":"Dong Quan Street"
            }
        ],
        "id": "huangyim",
        "name": "Huang Yi Ming"
   }
}

我只想打印smartGWT ListGrid中的id值。

代码语言:javascript
复制
public class ExampleEntry implements EntryPoint {
    #Override
    public void onModuleLoad() {
        DataSource dataSource = new DataSource();  
        dataSource.setDataFormat(DSDataFormat.JSON);  
        dataSource.setDataURL("http://localhost:8888/rest/contacts");
        dataSource.setRecordXPath("/contact");

        DataSourceTextField field = new DataSourceTextField("id", "id");
        dataSource.addField(field);        

        final ListGrid grid = new ListGrid();  
        grid.setDataSource(dataSource);
        grid.setAutoFetchData(true);  
        grid.draw();
    }
}

但它抛出了以下异常:

代码语言:javascript
复制
15:33:12.766 [ERROR] [jerseyexample] 15:33:12.747:XRP2:WARN:RPCManager:xmlHttpRequest.getAllResponseHeaders() returned null
com.smartgwt.client.core.JsObject$SGWT_WARN: 15:33:12.747:XRP2:WARN:RPCManager:xmlHttpRequest.getAllResponseHeaders() returned null
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
    at java.lang.Thread.run(Unknown Source)

我试着在谷歌上搜索,想找到一个修复方法,但是没有帮助。如果有人知道这个问题的解决方案,请让我知道。

EN

回答 2

Stack Overflow用户

发布于 2013-02-11 23:24:44

您只需更改数据url,而不是使用绝对路径,而是使用相对路径。

变化

代码语言:javascript
复制
dataSource.setDataURL("http://localhost:8888/rest/contacts");

代码语言:javascript
复制
dataSource.setDataURL("rest/contacts");

当您必须将其部署到远程服务器时,这也是必要的。

我建议您使用RestDataSource而不是普通的DataSource,它是专门为REST服务设计的,正如您所说的那样。

使用RestDataSource和使用DataSource一样简单。

代码语言:javascript
复制
@Override
public void onModuleLoad() {
    RestDataSource dataSource = new RestDataSource();  
    dataSource.setDataFormat(DSDataFormat.JSON);  
    dataSource.setDataURL("rest/contacts");
    dataSource.setRecordXPath("/contact");

    DataSourceTextField field = new DataSourceTextField("id", "id");
    dataSource.addField(field);        

    OperationBinding get=new OperationBinding();
    get.setOperationType(DSOperationType.FETCH);
    dataSource.setOperationBindings(get);

    final ListGrid grid = new ListGrid();  
    grid.setDataSource(dataSource);
    grid.setAutoFetchData(true);  
    grid.draw();
}

您可以将每个OperationBinding映射到每个http方法(GET、POST、PUT、DELETE)或任何适合您的REST API的方法。

干杯!

票数 1
EN

Stack Overflow用户

发布于 2015-03-04 01:33:33

您可以在要映射的字段中直接输入Xpath

RecordXPath可以直接在DataSource上指定,用于只能执行"fetch“操作的简单只读 DataSource。

代码语言:javascript
复制
field.setRecordXPath("contact")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14644283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档