当我尝试在控制器方法中检索表单结果时,我收到以下错误:
org.springframework.validation.BindException:org.springframework.validation.BeanPropertyBindingResult:1个错误 字段'clients'上对象'search'中的字段错误:被拒绝的值[14];代码[typeMismatch.search.clients,typeMismatch.clients,typeMismatch.java.util.List,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable:codes [search.clients,clients];参数[];默认消息[客户]];默认消息[无法将类型'java.lang.String'的属性值转换为属性'clients'的必需类型'java.util.List';嵌套异常是java.lang.IllegalStateException:无法将类型[java.lang.String]的值转换为属性'clients [0]'所需的类型[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 :(得分:2)
浏览器只会在提交表单时发送客户端ID列表。 Spring如何知道如何将每个ID转换为Client实例。您要么必须告诉它如何操作,要么向您的bean添加List<String> clientIds
属性,并使form:checkboxes
标记使用此属性而不是clients
作为其路径。