2011-08-09 90 views
0

我收到以下錯誤,當我嘗試檢索控制器方法形式的結果:Spring MVC中的數據綁定錯誤

org.springframework.validation.BindException:org.springframework.validation.BeanPropertyBindingResult:1錯誤 字段'客戶'的對象'搜索'中的字段錯誤:被拒絕的值[14];代碼[typeMismatch.search.clients,typeMismatch.clients,typeMismatch.java.util.List,typeMismatch]; [org.springframework.context.support.DefaultMessageSourceResolvable:codes [search.clients,clients];參數[];默認消息[clients]];默認消息[無法將'java.lang.String'類型的屬性值轉換爲屬性'clients'所需的類型'java.util.List';嵌套的異常是java.lang.IllegalStateException:無法將屬性'clients [0]'的[java.lang.String]類型的值轉換爲所需的類型[com.Client]:未找到匹配的編輯器或轉換策略]

模型對象看起來是這樣的:

public class SearchForm { 
    private String name; 
    private List<Client> clients; 
    //getters and setters 
} 
public class Client { 
    private String name; 
    private Int id; 
} 

形式:

<form:form method="POST", name="searchresults.html" modelattibute="search"> 
    <form:input path="name"/> 
    <form:checkboxes path="clients" items="{clientsList}" itemsValue="id" itemsLabel="name"/> 
</form:form> 

這種形式正確顯示HTML頁面上的價值,但是當我點擊提交按鈕,我得到上述錯誤

+0

這裏是form ' 此表單顯示正確的HTML頁面,但當我點擊提交按鈕時,我得到上述錯誤 – RKodakandla

+0

您是否爲您的班級客戶創建了屬性編輯器或轉換策略? – craftsman

回答

2

瀏覽器只會在提交表單時發送客戶端ID列表。 Spring如何知道如何將每個ID轉換成一個客戶端實例。您必須告訴它如何操作,或者向您的bean添加List<String> clientIds屬性,並使form:checkboxes標記使用此屬性而不是clients作爲其路徑。

+0

@JB ..謝謝你的答覆..第一部分..「我怎麼告訴它從ID生成客戶端實例..」我的意思是在控制器'公共字符串searchformsubmit(@ModelAttribute(「search 「)SearchForm搜索){}'..現在我在什麼時候添加要轉換的代碼?其次,如果我有名單,那麼我不能在jsp頁面上顯示客戶端名稱 – RKodakandla