Использование REST-сервисов с помощью SmartGWT

При создании простого клиента для службы REST, которую я отключил, я заметил, что класс RestDataSource smartGWT ограничен типом XML, который он может понять. Все ресурсы REST должны отвечать XML в следующем формате ..

<response>
    <status>0</status>
    <startRow>0</startRow>
    <endRow>10</endRow>
    <totalRows>50</totalRows>
    <data>
        <record>
            <someField>value</someField>
            <someOtherField>value</someOtherField>
        </record>
        <record>
            <someField>value</someField>
            <someOtherField>value</someOtherField> 
        </record>
        ...
    </data>
</response>

.. где единственный вариант - это теги someField / someOtherField.

Эта структура, представляющая собой не что иное, как пары имя / значение, нам не подходит.

Затем я увидел эту демонстрацию на витрине SmartGWT ...

http://www.smartclient.com/smartgwtee/showcase/#data_integration_server_rss

Это показывает, как использовать xml в произвольном формате для отображения, например, так ...

package com.smartgwt.sample.showcase.client.webservice;  

import com.smartgwt.client.data.DataSource;  
import com.smartgwt.client.data.fields.DataSourceTextField;  
import com.smartgwt.client.data.fields.DataSourceLinkField;  
import com.smartgwt.client.widgets.Canvas;  
import com.smartgwt.client.widgets.grid.ListGrid;  
import com.smartgwt.sample.showcase.client.PanelFactory;  
import com.smartgwt.sample.showcase.client.ShowcasePanel;  

public class RssSample implements EntryPoint {  

    public void onModuleLoad() {  
        DataSource dataSource = new DataSource();  
        dataSource.setDataURL("http://rss.slashdot.org/Slashdot/slashdot");  
        dataSource.setRecordXPath("//default:item");  

        DataSourceTextField titleField = new DataSourceTextField("title", "Title");  
        DataSourceLinkField linkField = new DataSourceLinkField("link", "Link");  

        dataSource.setFields(titleField, linkField);  

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

        grid.draw();  
    }  

}  

Это хорошо работает для GET, но как насчет PUT, POST и DELETE?

Может ли кто-нибудь поделиться кодом или указать мне на ресурс, демонстрирующий, как выполнять другие операции RESTful из клиента SmartGWT?

Спасибо


person rshepherd    schedule 12.08.2010    source источник


Ответы (1)


Используйте OperationBindings:

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/DataSource.html#setOperationBindings%28com.smartgwt.client.data.OperationBinding...%29

Вы можете управлять URL-адресом для связи, методом HTTP и многими другими вещами для каждой CRUD-операции.

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/DataSource.html#setDataURL(java.lang.String)

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/DataSource.html#setDataProtocol%28com.smartgwt.client.types.DSProtocol%29

Обратите внимание, что для использования этих конкретных HTTP-глаголов (PUT и DELETE) вы должны использовать setRequestProperties и setHTTPMethod:

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/DataSource.html#setRequestProperties%28com.smartgwt.client.data.DSRequest%29

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/rpc/RPCRequest.html#setHttpMethod%28java.lang.String%29

Но имейте в виду, что некоторые старые браузеры не поддерживают эти глаголы.

person Charles Kendrick    schedule 13.08.2010