2012-01-30 40 views
0

我的模型代碼日期通過錯誤4.0.2a MVC

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傳遞as'-19800000'

在服務器端,當我看到我的JAVA控制檯時,它顯示我的「startdate」:「1970-01-01T05:30:02」,「enddate」:「1970-01 -01T05:30:02「這是不正確的。由於這個原因,正確的日期不能在我的網格面板中查看。

我在做什麼這裏在我的代碼錯了。幫助我找到問題,以便我可以儘快解決。

我使用extjs 4.0.2a mvc和JAVA作爲我的服務器端技術。

+0

在服務器端,Java Date對象使用日期以毫秒爲單位,而客戶端使用日期以秒爲單位,不是? – 2012-01-30 09:30:13

+0

你可以在設置後記錄「記錄」的外觀嗎?可能是這個'set'方法沒有正確處理它。 – 2012-01-30 09:31:36

+0

我設置日期後,我的記錄看起來像** 1970-01-01 00:00:00 **。問題在於dateformat。選擇日期後,我將**日期作爲** 2012/01/31 **,但在分配給我的模型後,它會變成一些垃圾值,例如** 1970-01-01 00:00:00 ** whichi被髮送給服務器。你有任何想法如何解決這個問題? – 2012-01-30 09:43:48

回答

0

您的日期格式爲當前設置爲dateFormat: 'time',你有沒有試過這種更改爲:

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

這在類似的設置爲我工作。

更新2012-01-30:

檢查有關ExtJS的設置日期格式的詳細信息該API文檔:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.Date

0

看看this幫助你 - 我曾經遇到過類似的問題,並決定一直使用ISO 8601個的EXT-JS和Spring格式的日期,這是得到的方式這個工作:

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

總結:

使用自定義傑克遜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-860中的服務器1種格式:

Ext.JSON.encodeDate = function(o) 
{ 
   return '"' + Ext.Date.format(o, 'c') + '"'; 
}; 
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; 
    } 
});