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」として印刷された形式の日付を選択すると問題が発生しますが、firebug POSTタブを見ると、開始日が「-19800000」として渡され、終了日が「-」として渡されます。 19800000 '

サーバー側でJAVAコンソールを見ると、「startdate」:「1970-01-01T05:30:02」、「enddate」:「1970-01-01T05:30:02」が表示されますが、これは正しくありません。このため、グリッドパネルに正しい日付が表示されません。

私がここで間違っていることは私のコードです。すぐに解決できるように、問題を見つけるのを手伝ってください。

サーバーサイドテクノロジーとしてextjs4.0.2amvcとJAVAを使用しています。

4

3 に答える 3

0

dateFormatは現在に設定されて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

于 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>

UI でこれを処理するには、「c」の dateformat を使用します。

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'}]
});

日付を ISO-8601 形式でサーバーに送信するように Ext-JS を設定します。

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 に答える