快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

澳门新莆京app官网:spring mvc的bind问题(二)自定义对象有原生类型



因为我们的MaterialCategory里面有int agingTime等成员,当页面传入参数为“”时,会报如下差错:

Field error in object 'materialCategory' on field 'agingTime': rejected value []; codes [typeMismatch.materialCategory.agingTime,typeMismatch.agingTime,typeMismatch.int,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [materialCategory.agingTime,agingTime]; arguments []; default message [agingTime]]; default message [Failed to convert property value of type [java.lang.String] to required type [int] for property 'agingTime'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [int] for property 'agingTime': PropertyEditor [org.springframework.beans.propertyeditors.CustomNumberEditor] returned inappropriate value]

主要的差错是returned inappropriate value,便是说org.springframework.beans.prop澳门新莆京app官网ertyeditors.CustomNumberEditor类返回了一个分歧适的值,查看我们用到的spring2.5.6上的代码

看到代码行里面setAsText这个措施中

public void setAsText(String text) throws IllegalArgumentException {

if (this.allowEmpty && !StringUtils.hasText(text)) {

// Treat empty String as null value.

setValue(null);

}else if (this.numberFormat != null) {

// Use given NumberFormat for parsing text.

setValue(NumberUtils.parseNumber(text, this.numberClass,this.numberFormat));

}else {

// Use default valueOf methods for parsing text.

setValue(NumberUtils.parseNumber(text, this.numberClass));

}

}

当输入的值为“”,也便是StringUtils.hasText返回为false时,设置的是一个null到int中。。。

汗,这当然是分歧适的值了噻。不晓得是不是该这么处置惩罚,我写了一个类

CustomNativeEditor.java

代码完全拷贝自CustomNumberEditor类,只是改动了此中的这里:

public void setAsText(String text) throws IllegalArgumentException {

if 澳门新莆京app官网(this.allowEmpt澳门新莆京app官网y && !StringUtils.hasText(text)) {

// Treat empty String as null value.

setValue(0);

} else if (this.numberFormat != null) {

// Use given NumberFormat for parsing text.

setValue(NumberUtils.parseNumber(text, this.numberClass,

this.numberFormat));

} else {

// Use default valueOf methods for parsing text.

setValue(NumberUtils.parseNumber(text, this.numberClass));

}

}

改动initbind里面的措施

binder.registerCustomEditor(int.class, null, new CustomNativeEditor(

Integer.class, null , true));

binder.registerCustomEditor(Long.class, null, new CustomNumberEditor(

Long.class, null, true));

binder.registerCustomEditor(long.class, null, new CustomNativeEditor(

Long.class, null, true));

统统搞定。假如要处置惩罚输入的是“adsfasdf”等澳门新莆京app官网差错字符也不掉足的话,就在setAsTex澳门新莆京app官网t里面再做些改动就行了。

不晓得别人碰到这个问题有没有对照简单的法子,我是这样办理的。记录一下。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: