Spring 3 MVC验证BindingResult不包含任何错误

时间:2010-06-18 14:54:11

标签: hibernate validation spring spring-mvc

我正在尝试使用新的带注释的验证支持运行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和空字段的记录。

我缺少哪些步骤才能使验证工作?

1 个答案:

答案 0 :(得分:1)

<mvc:annotation-driven />应位于...-servlet.xml,而不是applicationContext.xml