问题
Im new using this front end framework application...
I recently started to work with smartgwt and i'm bulding a new application with a Spring MVC integration.
I'm using a ListGrid with a RestDataSource (Consume the Rest service with mvc:annotation-driven for plain JSON)
I can see that the servaice gets consuming properly perhaps my grid is never shown with the data in it.
Can someone help me here ?
Here's my ListGrid class
public class ListGrid extends com.smartgwt.client.widgets.grid.ListGrid {
private final SpringJSONDataSource springJSONDataSource;
public ListGrid(List<DataSourceField> fields) {
    this(new PatientDataSource(fields));
}
public ListGrid(SpringJSONDataSource springJSONDataSource) {
    this.springJSONDataSource = springJSONDataSource;
    init();
}
private void init() {
    setAutoFetchData(true);
    setAlternateRecordStyles(true);
    setEmptyCellValue("???");
    setDataPageSize(50);
    setDataSource(springJSONDataSource);
}
}
Now there's the DataSource implmentation
public abstract class SpringJSONDataSource extends RestDataSource {
protected final HTTPMethod httpMethod;
public SpringJSONDataSource(List<DataSourceField> fields) {
    this(fields, HTTPMethod.POST);
}
public SpringJSONDataSource(List<DataSourceField> fields, HTTPMethod httpMethod) {
    this.httpMethod = httpMethod;
    setDataFormat(DSDataFormat.JSON);
    addDataSourceFields(fields);
    setOperationBindings(getFetch());
    addURLs();
}
private void addURLs() {
    if(getUpdateDataURL() != null)
        setUpdateDataURL(getUpdateDataURL());
    if(getRemoveDataURL() != null)
        setRemoveDataURL(getRemoveDataURL());
    if(getAddDataURL() != null)
        setAddDataURL(getAddDataURL());
    if(getFetchDataURL() != null)
        setFetchDataURL(getFetchDataURL());
}
private void addDataSourceFields(List<DataSourceField> fields) {
    for (DataSourceField dataSourceField : fields) {
        addField(dataSourceField);
    }
}
protected abstract OperationBinding getFetch();
protected abstract OperationBinding getRemove();
protected abstract OperationBinding getAdd();
protected abstract OperationBinding getUpdate();
public abstract String getUpdateDataURL();
public abstract String getRemoveDataURL();
public abstract String getAddDataURL();
public abstract String getFetchDataURL();
}
The class PatientDataSource that extends SpringJSONDataSource
public class PatientDataSource extends SpringJSONDataSource {
public PatientDataSource(List<DataSourceField> fields) {
    super(fields);
    setPrettyPrintJSON(true);
}
@Override
protected OperationBinding getFetch() {
    OperationBinding fetch = new OperationBinding();
    fetch.setOperationType(DSOperationType.FETCH);
    fetch.setDataProtocol(DSProtocol.POSTMESSAGE);
    DSRequest fetchProps = new DSRequest();
    fetchProps.setHttpMethod(httpMethod.toString());
    fetch.setRequestProperties(fetchProps);
    return fetch;
}
@Override
public String getFetchDataURL() {
    return "/spring/fetchPatients";
}
@Override
protected OperationBinding getRemove() {
    return null;
}
@Override
public String getRemoveDataURL() {
    return null;
}
@Override
protected OperationBinding getAdd() {
    return null;
}
@Override
public String getAddDataURL() {
    return null;
}
@Override
protected OperationBinding getUpdate() {
    return null;
}
@Override
public String getUpdateDataURL() {
    return null;
}
}
My spring controller PatientControler
@Controller public class PatienController {
Logger logger = Logger.getLogger(PatienController.class);
@Autowired
private PatientServices patientServices;
@RequestMapping(value = "/patientTest", method = RequestMethod.GET)
@ResponseBody
public Object getTest()
{
    return patientServices.getAllPatients();
}
@RequestMapping(value = "/fetchPatients", method = RequestMethod.POST)
@ResponseBody
public Object getAllPatients()
{
    return patientServices.getAllPatients();
}
}
PatientServiceImpl
public class PatientServicesImpl implements PatientServices {
public List<Patient> getAllPatients() {
    List<Patient> patients = new ArrayList<Patient>();
    Patient patient;
    for(int i = 0 ; i < 500 ; i++){
        patient = new Patient();
        patient.setDateOfBirth(new Date());
        patient.setFirstName("Joe");
        patient.setMiddleName("Moe");
        patient.setLastName("Blow");
        patient.setLastConsultation(new Date());
        patient.setSex(Sex.M);
        patients.add(patient);
    }
    return patients;
}
}
*Im Really stuck right now i've been looking for all type of answers .... but so far nothing worked when i tried to override the transformResponse from my RestDataSource impentation the parameter "data" as an OBJECT, returns me an array [object Object],[object Object],[object Object],[object Object],[object Object] *
回答1:
The Data which is transferred from the RestDataSource has a specific format which is described in the JavaDoc of the RestDataSource Your server must understand the request and send back a valid response.
At the moment your example doesn't seem to honour the contract.
To debug the traffic send to and from your server you can use the SmartClient-Console. You can open it by a browser bookmark like this:
javascript:isc.showConsole()
Of cause you need to deploy this console by adding the following module to your gwt.xml
<inherits name="com.smartclient.tools.SmartClientTools"/>
Now go to the RPC Tab and check Track-RPCs
来源:https://stackoverflow.com/questions/13455342/smartgwt-listgrid-restdatasource-not-populating