ComboBox:当它的valueField为数字时,在POST上发送空字符串。如何将null传递给Server?

时间:2010-11-29 18:52:09

标签: combobox extjs jsonstore

所有

尝试使用Extjs的JSONStore通过POST创建新记录时,我收到了强制转换异常。将空字符串传递给服务器并且服务器尝试将其转换为Integer时会发生异常。 comboBox的valueField设置为int定义的字段。数据存储区字段如下:

  fields: [
            { name: 'id', type: 'int' },
            { name: 'displayOrder', mapping: 'displayOrder', type: 'int' },
            { name: 'displayName', mapping: 'displayName', type: 'string' },
            { name: 'enabled', mapping: 'enabled', type: 'boolean' },
            { name: 'letterCode', mapping: 'letterCode', type: 'string' }
        ],

组合框的定义是:

 {
                xtype: 'combo',
                id:"secondaryIncidentCombo",
                hiddenName: 'secondaryIncidentTypeId',
                forceSelection: true,
                width:"200",
                selectOnFocus: true,
                emptyText: 'Secondary Incident',
                editable: false,
                mode: 'local',
                displayField:   'displayName',
                valueField:     'id',
                store: this.secondaryIncidentTypeArrayStore,
                triggerAction: 'all'
            },

奇怪的是,用于发送POST的JSONStore将组合框的值作为空字符串发送,即使我已将JSONWriter配置为不发送未更改的字段:

 writer: new Ext.data.JsonWriter({
            encode: false,   
            writeAllFields:false
        }),

发送到服务器的POST值:....,"secondaryIncidentTypeId":"",...< - 注意冒号后面的空字符串。

这是secondaryIncidentTypeArrayStore:

    secondaryIncidentTypeArrayStore: new Ext.data.ArrayStore({
    idProperty: 'id',
    fields: [
        { name: 'id', mapping: 'id', type: 'int' },
        { name: 'displayOrder', mapping: 'displayOrder', type: 'int' },
        { name: 'displayName', mapping: 'displayName', type: 'string' },
        { name: 'enabled', mapping: 'enabled', type: 'boolean' },
        { name: 'letterCode', mapping: 'letterCode', type: 'string' }
    ],
    data: []
})

我正在编写一个空字符串的手动检查,如果字符串为空则将其设置为null。这看起来非常糟糕。在表单提交上向服务器发送无效或空值的正确方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

正在发生的事情是因为id字段的类型为integer,它会将其强制转换为整数。因此,假值为0

如果删除该类型,它将不会进行任何转换,并且在未定义时不会添加该ID。

e.g。

new Ext.data.ArrayStore({
  idProperty: 'id',
  fields: [
    { name: 'id', mapping: 'id' },
    { name: 'displayOrder', mapping: 'displayOrder', type: 'int' },
    { name: 'displayName', mapping: 'displayName', type: 'string' },
    { name: 'enabled', mapping: 'enabled', type: 'boolean' },
    { name: 'letterCode', mapping: 'letterCode', type: 'string' }
  ],
  data: []
})

如果您必须发送id=null以使后端表现出一种处理方式,那就是添加自定义Ext.data.Type

如果这两种方法都不合适,也可以使用其他解决方法。

编辑:啊哈!试试allowNull属性。