0

URL: で REST API を作成しました。http://localhost:8888/rest/contactsこの JSON 出力を使用します。

{
    "contact": {
        "address": [
            {
                "city":"Shanghai",
                "street":"Long Hua Street"
            },
            {
                "city":"Shanghai",
                "street":"Dong Quan Street"
            }
        ],
        "id": "huangyim",
        "name": "Huang Yi Ming"
   }
}

smartGWT ListGrid に id 値のみを出力したいと考えています。

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();
    }
}

ただし、次の例外がスローされます。

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)

グーグルで検索して修正を試みましたが、解決しませんでした。この問題の解決策を知っている人がいたら教えてください。

4

2 に答える 2

1

絶対パスを使用する代わりに、相対パスを使用する代わりに、データの URL を変更するだけです。

変化する

dataSource.setDataURL("http://localhost:8888/rest/contacts");

dataSource.setDataURL("rest/contacts");

これは、リモート サーバーにデプロイする必要がある場合にも必要です。

プレーンな DataSource の代わりにRestDataSourceを使用することをお勧めします。これは、REST サービス用に特別に設計されています。

RestDataSource の使用は、DataSource の使用と同じくらい簡単です。

@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 に適したものにマップできます。

乾杯!

于 2013-02-11T15:24:43.630 に答える
0

マップしたいフィールドにXpathを直接入れることができます

RecordXPath は、「フェッチ」操作のみが可能な単純な読み取り専用DataSourceの DataSource で直接指定できます。

field.setRecordXPath("contact")
于 2015-03-03T17:33:32.970 に答える