所有
尝试使用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。这看起来非常糟糕。在表单提交上向服务器发送无效或空值的正确方法是什么?
谢谢!
答案 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
属性。