我正在尝试使用新的带注释的验证支持运行Spring 3.0.2 WebMVC项目。我有一个Hibernate实体注释如下:
@Entity
@Table(name = "client")
public class Client implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "clientId", nullable = false)
@NotEmpty
private Integer clientId;
@Basic(optional = false)
@Column(name = "firstname", nullable = false, length = 45)
@NotEmpty
@Size(min=2, max=45)
private String firstname;
... more fields, getters and setters
}
我在applicationContext.xml文件中启用了mvc注释支持:
<mvc:annotation-driven />
我的控制器中有一个响应表单提交的方法:
@RequestMapping(value="/addClient.htm")
public String addClient(@ModelAttribute("client") @Valid Client client, BindingResult result) {
if(result.hasErrors()) {
return "addClient";
}
service.storeClient(client);
return "clientResult";
}
当我的应用加载到服务器中时,我可以在服务器日志文件中看到它加载验证器:
15 [http-8084-2] INFO org.hibernate.validator.util.Version - Hibernate Validator 4.0.2.GA
我遇到的问题是验证器似乎没有启动。我打开了调试器,当我进入控制器方法时,BindingResult在提交空表单后包含0个错误。 (BindingResult确实显示它包含Client对象作为目标。)然后它继续插入没有Id的记录并抛出异常。如果我填写一个Id但将名称留空,则会创建一个带有Id和空字段的记录。
我缺少哪些步骤才能使验证工作?
答案 0 :(得分:1)
<mvc:annotation-driven />
应位于...-servlet.xml
,而不是applicationContext.xml
。