Вывести значение даты и времени в StaticTextField в SmartGWT - PullRequest
0 голосов
/ 29 сентября 2011

В моем наборе данных есть поле, определенное как:

DataSourceDateTimeField dateField = new DataSourceDateTimeField("date");

и StaticTextItem in DynamicForm определены как

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

Я много играл с различными комбинациями setDateFormatter, но значения даты и времени по-прежнему отображаются как 2011-08-23T20:00:00 (источник данных получает его в json как поле yyyy-MM-dd'T'HH:mm:ss.SSSZ).

Есть ли какой-нибудь простой способ вывода значений даты и времени в StaticTextItem? Я предполагаю, используя DynamicForm.fetchData().


UPD1. Пример данных.

Строка таблицы в PgSQL:

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

Данные, отправленные службой REST:

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

Данные, извлеченные SGWT из службы REST (я сбросил их с JSON.encode(XMLTools.selectObjects(data, "/").getJavaScriptObject()) в моей реализации transformResponse()):

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

Значение, отображаемое в StaticTextField:

2011-09-29T08:10:05

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


UPD2. Может быть, я делаю что-то не так в моем 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 into 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);
}-*/;

1 Ответ

1 голос
/ 02 октября 2011

Скорее всего, ваша проблема в том, что значение даты по-прежнему является строкой, а не экземпляром даты.Он должен был быть проанализирован в Date, когда был получен ответ JSON - в противном случае в консоли разработчика SmartGWT будет выдано предупреждение.

Формат, ожидаемый для значений даты в документированном в DataSource.dataFormat - Формат даты / даты и времени для схемы XML по умолчанию ожидается, и вы можете предоставить FieldValueParser, если вы не можете заставить свой сервер создавать этот формат.

...