开发者

Output datetime value to StaticTextField in SmartGWT

开发者 https://www.devze.com 2023-04-09 10:42 出处:网络
I have a field in my dataset defined as: DataSourceDateTimeField dateField = new DataSourceDateTimeField(\"date\");

I have a field in my dataset defined as:

DataSourceDateTimeField dateField = new DataSourceDateTimeField("date");

and a StaticTextItem in DynamicForm defined as

StaticTextItem dateItem = new StaticTextItem("date", "Date");

I played a lot with different combinations of setDateFormatter, but datetime values are still rendered as something like 2011-08-23T20:00:00 (datasource receives it in json as a yyyy-MM-dd'T'HH:mm:ss.SSSZ field).

Is there some easy way to output datetime values to StaticTextItem? I assume using DynamicForm.fetchData().


UPD1. Data example.

Table row in PgSQL:

1 | "2011-09-29 12:10:05.010276+04" | "Europe"

Data sent by REST service:

{
  "location":"Europe",
  "id":1,
  "date":"2011-09-29T08:10:05.010+0000"
}

Data fetched by SGWT from REST service (I dumped it with JSON.encode(XMLTools.selectObjects(data, "/").getJavaScriptObject()) in my implementation of transformResponse()) :

{
  "location":"Europe", 
  "id":1, 
  "date":"2011-09-29T08:10:05"
}

Value as rendered in StaticTextField:

2011-09-29T08:10:05

So datetime values returned by server seem to conform the standard and also I have no warnings in Developer Console.


UPD2. May be I'm doing something wrong in my transformResponse() ?

protected void transformResponse(DSResponse response, DSRequest request, Object data) {

  String json = JSON.encode(XMLTools.selectObjects(data, "/").getJavaScriptObject());

  SC.logWarn("Response received");
  SC.logWarn(json);

  Record[] records = jsonToRecords(json);
  //safe HTML text values
  for (Record rec: records) {
    for (DataSourceField field: getFields()) {
      if (field.getType() == FieldType.TEXT) {
        String textVal = rec.getAttribute(field.getName());
        if (textVal != null) {
          textVal = SafeHtmlUtils.htmlEscape(textVal);  
        }    
        rec.setAttribute(field.getName(), textVal);
      }
    }
  }

  response.setData(records);    
  response.setStartRow(0);
  response.setEndRow(records.length);
  response.setTotalRows(records.length);
}

/**
* Converts JS-array 开发者_如何学JAVAinto SmartGWT records
*/
public static native ListGridRecord[] jsonToRecords(String jsonString) /*-{
  var json = eval(jsonString);
  return @com.smartgwt.client.widgets.grid.ListGrid::convertToListGridRecordArray(Lcom/google/gwt/core/client/JavaScriptObject;)(json);
}-*/;


Your problem is most likely that your date value is still a String, not an instance of Date. It should have been parsed into a Date when the JSON response was received - if it was not, there will be a warning in the SmartGWT Developer Console tell you so.

The format expected for date values in documented under DataSource.dataFormat - XML Schema date/datetime format is expected by default, and you can provide a FieldValueParser if you are unable to make your server produce this format.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号