0

我的型号代码是

Ext.define('gantt.model.Project', {
    extend: 'Ext.data.Model',   
    fields : [
              { name: 'id', type: 'int', useNull: true, mapping: 'projectid'},
              { name: 'title', type: 'string', mapping: 'projecttitle'},
              { name: 'name', type: 'string', mapping: 'projectname'},
              { name: 'description', type: 'string', mapping: 'projectdesc'},
              { name: 'startdate', type: 'date', mapping: 'startdate', dateFormat :'time'},
              { name: 'enddate', type: 'date', mapping: 'enddate', dateFormat :'time'},
          ]

});

我的看法是

Ext.define('gantt.view.projectmgt.projectAdd', {
    extend: 'Ext.form.Panel',
    alias: 'widget.projectadd',
    title: 'New Project Detail Input Window',
    width: '50%',

    xtype:'fieldset',
    title: 'Project Details',
    collapsible: true,
    defaultType: 'textfield',
    layout: 'anchor',
    defaults: {
        anchor: '100%'
    },
    items :[{
            fieldLabel: 'Title',
            name: 'title',
            xtype: 'textfield'              
        },{
            fieldLabel: 'Name',
            name: 'name',
            xtype: 'textfield'
        },{
            fieldLabel: 'StartDate',
            name: 'startdate',
            xtype: 'datefield',
            format: 'Y/m/d'
        },{
            fieldLabel: 'EndDate',
            name: 'enddate',
            xtype: 'datefield',
            format: 'Y/m/d'
        }, {
            xtype: 'htmleditor',
            name: 'description',
            fieldLabel: 'Description',
            height: 200,
            anchor: '100%'
        }],

    buttons: [{
        text: 'Save',
        action: 'show-gantt-view'
    },{
        text: 'Cancel',
        action: 'cancel'
    }]
});

当我单击它时,我的表单面板有保存按钮我的控制器执行以下方法

createProjectGanttpanel: function(btn) {
        var win = this.getProjectAdd().getForm().getValues();
        console.log('PANEL VALUES ARE ::'+win["startdate"]);
        record = Ext.create('gantt.model.Project');
        record.set(win);
        this.getProjectsStore().add(record);
        this.getProjectsStore().sync();
    }

此方法将值分配给模型,然后将它们存储到我的数据库中。但是当我选择在控制台日志中打印的格式为“2012/01/31”的日期时遇到问题,但是当我看到萤火虫 POST 选项卡时,它显示 startdate 传递为“-19800000”,enddate 传递为“- 19800000'

在服务器端,当我看到我的 JAVA 控制台时,它会显示“startdate”:“1970-01-01T05:30:02”,“enddate”:“1970-01-01T05:30:02”,这是不正确的。因此,在我的网格面板中未查看正确的日期。

我在我的代码中做错了什么。帮助我找到问题,以便我尽快解决。

我使用 extjs 4.0.2a mvc 和 JAVA 作为我的服务器端技术。

4

3 回答 3

0

您的 dateFormat 当前设置为dateFormat: 'time',您是否尝试将其更改为:

dateFormat: 'Y-m-d h:i:s'

这在类似的设置中对我有用。

更新 2012-01-30:

查看此 API 文档以获取有关在 ExtJs 中格式化日期的更多信息:http ://docs.sencha.com/ext-js/4-0/#!/api/Ext.Date

于 2012-01-30T19:08:15.720 回答
0

看看是否对你有帮助 - 我遇到了类似的问题,并决定在 Ext-JS 和 Spring 中始终使用 ISO 8601 格式的日期,这是让它工作的方法:

http://biju-allandsundry.blogspot.com/2012/01/ext-js-json-datetime-mapping-in-spring.html

总结一下:

使用自定义 Jackson ObjectMapper 以 ISO8601 格式写入日期:

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig.Feature;
 
public class CustomObjectMapper extends ObjectMapper {
    public CustomObjectMapper(){
        super.configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false);
    }
}

注册此自定义对象映射器:

<mvc:annotation-driven > 
    <mvc:message-converters register-defaults="false">
        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
            <property name="objectMapper">
                <bean class="org.bk.simplygtd.web.spring.CustomObjectMapper"/>
            </property>
        </bean>
    </mvc:message-converters>
 </mvc:annotation-driven>

使用 'c' 的日期格式在 UI 中处理此问题:

Ext.define('CUSTOM.model.Proj',{
    extend: 'Ext.data.Model',
    fields:[{name:'id', type:'string'},{name:'name', type:'string'}, 
            {name:'startDate', type:'date', dateFormat:'c'}, {name:'completedDate', type:'date', dateFormat:'c'},
            {name:'isDone', type:'boolean'}, {name:'version', type:'string'}]
});

设置 Ext-JS 以 ISO-8601 格式将日期提交回服务器:

Ext.JSON.encodeDate = function(o)
{
   return '"' + Ext.Date.format(o, 'c') + '"';
};
于 2012-01-30T23:06:18.097 回答
0

与其自定义服务器端以接受虚假的日期格式,不如实现一个自定义Ext.data.writer.Writer,简单地修改所有日期字段以供 Java 读取。然后在注册代理时,只需添加writer: 'javajson'到配置中。

/**
 * Java compatible Json writer
 * @class My.component.data.writer.JavaJson
 * @extends Ext.data.writer.Json
 */
Ext.define('My.component.data.writer.JavaJson', {
  extend: 'Ext.data.writer.Json',
  alternativeClassName: 'My.component.data.JavaJsonWriter',

  alias: 'writer.javajson',

  //inherit docs
  getRecordData: function(record, operation) {
      var data = this.superclass.getRecordData(record, operation),
          fields = record.fields,
          fieldItems = fields.items,
          nameProperty = this.nameProperty,
          field,
          name,
          value;

      for(f = 0; f < fieldItems.length; f++) {
          field = fieldItems[f];
          if(field.type === Ext.data.Types.DATE) {
              name = field[nameProperty] || field.name;
              value = record.get(field.name);
              data[name] = Ext.isEmpty(value) ? value : value.getTime();
          }
      }

      return data;
  }
});
于 2012-12-19T09:41:51.497 回答