Combobox 组合框:当它';s的valueField是数字字段。如何将null传递给服务器?
全部, 当我试图使用Extjs的JSONStore通过POST创建新记录时,我遇到了一个强制转换异常。当一个空字符串被传递给服务器并且服务器试图将其转换为整数时,会发生异常。组合框的valueField设置为int定义的字段。数据存储字段如下所示:Combobox 组合框:当它';s的valueField是数字字段。如何将null传递给服务器?,combobox,extjs,jsonstore,Combobox,Extjs,Jsonstore,全部, 当我试图使用Extjs的JSONStore通过POST创建新记录时,我遇到了一个强制转换异常。当一个空字符串被传递给服务器并且服务器试图将其转换为整数时,会发生异常。组合框的valueField设置为int定义的字段。数据存储字段如下所示: fields: [ { name: 'id', type: 'int' }, { name: 'displayOrder', mapping: 'displayOrder', type: '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将combobox的值作为空字符串发送,尽管我已将JSONWriter配置为不发送未更改的字段:
writer: new Ext.data.JsonWriter({
encode: false,
writeAllFields:false
}),
发送到服务器的POST值:
…,“secondaryIncidentTypeId:”,“…
发生的情况是,因为id
字段的类型是integer
它将其强制为整数。因此,falsy值将为0
如果删除类型,它将不会进行任何转换,并且在未定义id时不会添加id
e、 g
如果您必须发送id=null
以使后端正常工作,那么处理它的一种方法就是添加一个自定义代码
如果这两种方法都没有引起你的兴趣,你也可以用其他方法来解决
编辑:啊哈!请尝试该属性。发生的情况是,因为
id
字段的类型是integer
它将其强制为整数。因此,falsy值将为0
如果删除类型,它将不会进行任何转换,并且在未定义id时不会添加id
e、 g
如果您必须发送id=null
以使后端正常工作,那么处理它的一种方法就是添加一个自定义代码
如果这两种方法都没有引起你的兴趣,你也可以用其他方法来解决
编辑:啊哈!尝试属性。我尝试删除组合中使用的值字段的类型声明,但没有效果。创建自定义类型是一种可能性,我只是惊讶于框架还不能处理这个问题。谢谢你的输入!编辑以显示我的意思--您这样做了,它仍然将
null
转换为0
?我尝试删除组合中使用的值字段的类型声明,但没有效果。创建自定义类型是一种可能性,我只是惊讶于框架还不能处理这个问题。谢谢你的输入!编辑以显示我的意思--您这样做了,但它仍然将null
转换为0
?
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: []
})
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: []
})