Hello,
I want to display a grid that is updated say each 5s on on user action with data that comes from a servlet. The servlet answers a JSON array that I get thru a dataSource. The JSON array contains messages that are added slowly.
I want my grid to be updated according to the content of the json. I have filters in my page to drive the access to the servlet.
example: I want all the messages of this kind of today. The filtering is performed in the serverside.
The url to acces is like "my-servlet?fromDate=20101021&kind=WARN" according to the filter.
What is the best practice to do that? below, I have put the piece of code I tried (method query is called). My grid does not change. The callback returns a com.google.gwt.core.client.JavaScriptObject, I don't know what to do with it.
Thank's for helping me start with smartGWT
version:
SmartGWT 2.2 / Firefox 3.6
I want to display a grid that is updated say each 5s on on user action with data that comes from a servlet. The servlet answers a JSON array that I get thru a dataSource. The JSON array contains messages that are added slowly.
I want my grid to be updated according to the content of the json. I have filters in my page to drive the access to the servlet.
example: I want all the messages of this kind of today. The filtering is performed in the serverside.
The url to acces is like "my-servlet?fromDate=20101021&kind=WARN" according to the filter.
What is the best practice to do that? below, I have put the piece of code I tried (method query is called). My grid does not change. The callback returns a com.google.gwt.core.client.JavaScriptObject, I don't know what to do with it.
Thank's for helping me start with smartGWT
Code:
package com.airbus.mcctls.client; import java.util.HashMap; import java.util.Map; import org.apache.tools.ant.types.CommandlineJava.SysProperties; import com.smartgwt.client.data.DSCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.DataSourceField; import com.smartgwt.client.data.fields.DataSourceDateTimeField; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.DSDataFormat; import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; public class MessageGrid extends ListGrid{ private DataSource dataSource = null; public MessageGrid() { dataSource = new DataSource(); dataSource.setDataFormat(DSDataFormat.JSON); dataSource.setDataURL("my-servlet?fromDate=20101021"); DataSourceTextField msnSrc = new DataSourceTextField( "EXT_AIRCRAFT_MSN", "MSN"); DataSourceTextField airlineSrc = new DataSourceTextField( "EXT_AIRLINE_IDENTIFIER", "Airline"); DataSourceTextField acTypeSrc = new DataSourceTextField( "EXT_AIRCRAFT_FAMILY", "AcType"); DataSourceTextField msgTypeSrc = new DataSourceTextField( "TYPE_IDENTIFIER", "Type"); DataSourceTextField tailNumberSrc = new DataSourceTextField( "MSG_AIRCRAFT_TAILNUMBER", "Id"); DataSourceDateTimeField timeSrc = new DataSourceDateTimeField( "MSG_UTC_TRANSMISSION_DATE_TIME", "time"); dataSource .setFields(timeSrc, airlineSrc, tailNumberSrc, msnSrc, acTypeSrc, msgTypeSrc); //airline column ListGridField airlineField = defaultField(airlineSrc); airlineField.setAlign(Alignment.CENTER); airlineField.setWidth(40); airlineField.setType(ListGridFieldType.IMAGE); airlineField.setImageURLPrefix("airline/icon/"); airlineField.setImageURLSuffix(".gif"); ListGridField timeField = defaultField (timeSrc); timeField.setWidth(125); timeField.setAlign(Alignment.CENTER); ListGridField acTypeField = defaultField(acTypeSrc); acTypeField.setWidth(50); ListGridField msnField = defaultField(msnSrc); msnField.setWidth(50); ListGridField tailNumberField = defaultField(tailNumberSrc); tailNumberField.setWidth(50); ListGridField msgTypeField = defaultField(msgTypeSrc); msgTypeField.setWidth(50); setFields(timeField, airlineField, tailNumberField, msnField, acTypeField, msgTypeField); setDataSource(dataSource ); setAutoFetchData(true); } private ListGridField defaultField(DataSourceField src) { return new ListGridField(src.getName(), src.getTitle()); } public void query() { DSCallback callback = new DSCallback() { @Override public void execute(DSResponse response, Object rawData, DSRequest request) { System.out.println(rawData); //what have I to do? } }; DSRequest request = new DSRequest(); Map<String, String> params = new HashMap<String, String>(); params.put("kind",//getTheKind); params.put("fromDate",//getTheFromDate); request.setParams(params); dataSource.fetchData(null, callback, request); } }
SmartGWT 2.2 / Firefox 3.6