2011-08-09 65 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