2012-10-15 57 views
0

我有一個國家,州和城市下拉框的JSP。城市默認填充,然後州和城市將根據使用阿賈克斯選定的國家和州進行。彈出mvc綁定異常提交選擇框

<form:select path="ContactInfoVO[0].countryList" multiple="single" id="country">  
<form:option value="-1" label="-- Select Country--"></form:option>      
<c:forEach var="country" items="${ManagerVO.ContactInfoVO[0].countryList}" varStatus="item"> 
<form:option value="${country.countryId}" label="${country.countryName}"/></c:forEach> </form:select> 

<form:select path="ContactInfoVO[0].stateList" multiple="single" id="state" class="small">  
<form:option value="-1" label="-- Select State--"></form:option>       
<c:forEach var="state" items="${ManagerVO.ContactInfoVO[0].stateList}" varStatus="item"> 
<form:option value="${state.stateId}" label="${state.stateName}"/></c:forEach></form:select>  

<form:select path="ContactInfoVO[0].cityList" multiple="single" id="city" class="validate[required] small">  
<form:option value="-1" label="-- Select City--"></form:option>      
<c:forEach var="city" items="${ManagerVO.ContactInfoVO[0].cityList}" varStatus="item"> 
<form:option value="${city.cityId}" label="${city.cityName}"/></c:forEach></form:select> 

當我提交此表,我得到的錯誤 -

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 3 errors 
    Field error in object 'ManagerVO' on field 'ContactInfoVO[0].cityList': rejected value [80930]; codes [typeMismatch.ManagerVO.ContactInfoVO[0].cityList,typeMismatch.ManagerVO.ContactInfoVO.cityList,typeMismatch.ContactInfoVO[0].cityList,typeMismatch.ContactInfoVO.cityList,typeMismatch.cityList,typeMismatch.java.util.List,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [ManagerVO.ContactInfoVO[0].cityList,ContactInfoVO[0].cityList]; arguments []; default message [ContactInfoVO[0].cityList]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.List' for property 'ContactInfoVO[0].cityList'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.admin.command.CityVO] for property 'cityList[0]': no matching editors or conversion strategy found] 
    Field error in object 'ManagerVO' on field 'ContactInfoVO[0].countryList': rejected value [31]; codes [typeMismatch.ManagerVO.ContactInfoVO[0].countryList,typeMismatch.ManagerVO.ContactInfoVO.countryList,typeMismatch.ContactInfoVO[0].countryList,typeMismatch.ContactInfoVO.countryList,typeMismatch.countryList,typeMismatch.java.util.List,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [ManagerVO.ContactInfoVO[0].countryList,ContactInfoVO[0].countryList]; arguments []; default message [ContactInfoVO[0].countryList]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.List' for property 'ContactInfoVO[0].countryList'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.admin.command.CountryVO] for property 'countryList[0]': no matching editors or conversion strategy found] 
    Field error in object 'ManagerVO' on field 'ContactInfoVO[0].stateList': rejected value [601]; codes [typeMismatch.ManagerVO.ContactInfoVO[0].stateList,typeMismatch.ManagerVO.ContactInfoVO.stateList,typeMismatch.ContactInfoVO[0].stateList,typeMismatch.ContactInfoVO.stateList,typeMismatch.stateList,typeMismatch.java.util.List,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [ManagerVO.ContactInfoVO[0].stateList,ContactInfoVO[0].stateList]; arguments []; default message [ContactInfoVO[0].stateList]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.List' for property 'ContactInfoVO[0].stateList'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.admin.command.StateVO] for property 'stateList[0]': no matching editors or conversion strategy found] 

有人可以告訴我怎麼解決?

回答

1

錯誤在輸出中:您正試圖設置您的域類字段ContactInfoVO[0].cityList,其類型List的值爲String

沒有看到您的域類的代碼等,它很難知道你的網頁打算做什麼。如果您試圖使用用戶確定的單個值填充數據庫,那麼通常使用不同表(或類/枚舉)中的值填充選擇下拉列表,然後將用戶選擇的單個值設置爲它自己的值類/表。看起來你正在試圖用同一個班級做兩件事。

+0

我只是試圖在狀態和國家的基礎上填充城市,在表單提交我將只使用cityId。所有三個字段(國家,州,城市)都有自己的主表,從中選擇框正在填充。現在,當我點擊提交時,彈簧在達到控制器之前就會引發此錯誤,這意味着模型屬性的綁定失敗。你可以給我一些建議,讓我可以在我的控制器上獲取cityId嗎? – Sachin

+1

我認爲你需要改變''綁定到不同的路徑。一個採用「String」值而不是「List」。 ContactInfoVO [0] .cityList期望一個列表,並且您試圖將其設置爲一個字符串。因此,您似乎試圖將cityId設置回您的主列表,而不是要保存數據的表格。 – nickdos

+0

謝謝,不知道我怎麼沒有注意到這個更早:(但這解決了這個問題 – Sachin

0

我看到你正在嘗試設置(例如)一個countryId到ContactInfoVO [0] .countryList。所以你正在設置一個Integer到一個List。

我認爲這個問題是在這裏:

<form:select path="ContactInfoVO[0].countryList" multiple="single" id="country"> 

我沒有看到一個countryList有任何意義。它應該更像ContactInfo[0].countryId它匹配你選擇的,在這種情況下,"${country.countryId}"

這將是更清楚,如果你的職位ContractInfoVO類和你的標籤。