?
快捷搜索:  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里面再做些改動就行了。

不曉得別人碰到這個問題有沒有對照簡單的法子,我是這樣辦理的。記錄一下。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户