Version: SmartGWT 2.2 with RPC extension
I'm trying to implement a SmartGWT-RPC solution, but doing it a little differently by returning JSON back to the executeFetch instead of Java objects. It seems to work pretty well and my grid gets populated.
Where it gets tricky, is when I need to navigate down the JSON using setValueXPath. Since I'm using GWT-RPC, I need to set DSProtocol.CLIENTCUSTOM in my datasource, and valueXPath doesn't seem to work.
Does setValueXPath get ignored because I'm using ClientCustom and it expects me to process all data myself ?
If so, is there a way I can still use GWT-RPC and valueXPath together ?
Datasource:
JSON:
I'm trying to implement a SmartGWT-RPC solution, but doing it a little differently by returning JSON back to the executeFetch instead of Java objects. It seems to work pretty well and my grid gets populated.
Where it gets tricky, is when I need to navigate down the JSON using setValueXPath. Since I'm using GWT-RPC, I need to set DSProtocol.CLIENTCUSTOM in my datasource, and valueXPath doesn't seem to work.
Does setValueXPath get ignored because I'm using ClientCustom and it expects me to process all data myself ?
If so, is there a way I can still use GWT-RPC and valueXPath together ?
Datasource:
Code:
public class LaborRateDS extends GwtRpcJsonDataSource { public LaborRateDS() { DataSourceField field; field = new DataSourceTextField("id", "Id"); field.setPrimaryKey(true); field.setHidden(true); field.setRequired(false); addField(field); field = new DataSourceTextField("rateValue", "Rate Value"); field.setRequired(true); addField(field); field = new DataSourceTextField("year", "Year"); field.setRequired(true); addField(field); field = new DataSourceTextField("userId", "User Id"); field.setValueXPath("data/rateSheet/userId"); field.setRequired(true); addField(field); field = new DataSourceTextField("effectiveDate", "Effective Date"); field.setValueXPath("data/rateSheet/effectiveDate"); field.setRequired(true); addField(field); } @Override protected void executeFetch(final String requestId, final DSRequest request, final DSResponse response) { String rateSheetId = request.getCriteria().getAttribute("rateSheetId"); System.out.println("rateSheetId=" + rateSheetId); System.out.println("startRow=" + request.getStartRow()); System.out.println("endRow=" + request.getEndRow()); RateSheetServiceAsync service = GWT.create(RateSheetService.class); service.fetchLaborRates(rateSheetId, new AsyncCallback<String>() { @Override public void onFailure(Throwable caught) { caught.printStackTrace(); response.setStatus(RPCResponse.STATUS_FAILURE); processResponse(requestId, response); } @Override public void onSuccess(String json) { JavaScriptObject jsObj = JSON.decode(json); response.setJsObj(jsObj); processResponse(requestId, response); } }); } }
Code:
{ "status":0, "startRow":0, "endRow":50, "totalRows":1344, "data":[ { "id":"00BAB4AE-A48C-4288-AF40-BEA794370813", "laborGuid":"E31E5566-3662-4A2F-8218-59D15F123803", "rateIndexGuid":"4D5ECC96-8687-4000-9D22-8C33BD4D178C", "rateValue":"36.8700000000", "year":2010, "rateSheet":{ "id":"4D5ECC96-8687-4000-9D22-8C33BD4D178C", "name":"Ver 026 - 08/19/10", "active":true, "effectiveDate":"Sep 8, 2010 6:08:45 PM", "userId":"BATCH", "businessUnit":"SAS" } }, { "id":"011025D4-7C12-4828-AFA4-490BABA98BD6", "laborGuid":"CB3C58C0-3A1D-4366-872A-49669F28518C", "rateIndexGuid":"4D5ECC96-8687-4000-9D22-8C33BD4D178C", "rateValue":"46.8700000000", "year":2010, "rateSheet":{ "id":"4D5ECC96-8687-4000-9D22-8C33BD4D178C", "name":"Ver 026 - 08/19/10", "active":true, "effectiveDate":"Sep 8, 2010 6:08:45 PM", "userId":"BATCH", "businessUnit":"SAS" } } ] }