使用Hibernate验证的Spring MVC无法工作。

4

我在使用Spring框架中的Hibernate验证时遇到了一些问题。我按照在线教程中的步骤操作,但是无法正常工作,提交表单后直接进入下一页,没有进行验证。请帮忙检查一下。

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Customer {

private String firstName;

@NotNull()
@Size(min=1, message = "this field must not to be empty")
private String lastName;

控制器:

@RequestMapping("/processForm")
public String processForm(@ModelAttribute("customer") @Valid Customer 
                          customer, BindingResult bindingResult) {
    if(bindingResult.hasErrors()) {
        return "customer-form";
    }
    return "customer-confirmation";
}

customer-form.jsp

<form:form action="processForm.form" modelAttribute="customer">
    First name: <form:input path="firstName"/>
    <br>
    Last name (*): <form:input path="lastName"/>
    <form:errors path="lastName" cssClass="error"/>
    <input type="submit" value="Submit"/>
</form:form>

当我的lastName字段为空时,BindingResult中没有错误。我做错了什么吗?


你是在执行HTTP GET还是POST请求? - rieckpil
这是POST方法。 - Anton Barinov
3个回答

3

如果不存在,将hibernate-validator添加到类路径中。如果您使用任何构建工具(如gradlemaven),只需将hibernate-validator添加到依赖项中。

例如:

Gradle:

compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.0.13.Final'

Maven:

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.13.Final</version>
</dependency>

只是一个提示,您可以通过检查应用程序启动时的以下日志行(这是来自Spring Boot应用程序的,但其他平台也应该显示它)来检查HV是否已正确初始化:[background-preinit] INFO Version HV000001: Hibernate Validator 5.3.5.Final - Janaka Bandara

1

注意:本解决方案基于IntelliJ IDEA IDE

如果没有使用构建工具(如Gradle或Maven),这可能与手动添加库(项目依赖项)时IDE在编译和构建解决方案期间的行为有关。

无论是否通过“项目结构”>“库”手动添加库文件并使其被IDE索引,这些库不会自动包含在构建过程的编译输出中。

为了确保您包含的库与Spring MVC解决方案一起组装,请执行以下操作:

  • 转到“文件”>“项目结构”>“构件”(从左窗格中)

enter image description here

  • 在输出布局选项卡下展开 WEB-INF/lib 目录。

enter image description here

  • 通过单击 + 按钮并选择库文件,突出显示 lib 目录并添加相应的 Hibernate 构件

enter image description here

  • 在从项目库中选择库之后,选择“确定”,“应用”,然后就可以开始了。

enter image description here

现在,当您重新构建解决方案并运行服务器时,您的已组装输出(构建)将包含所有额外添加的工件(库),例如Hibernate验证。
使用IntelliJ IDEA的构建器编译基于Java的项目时,它使用自己的项目模型、配置和内置机制来组装输出应用程序,因此需要像我提到的这样的步骤。
与使用Gradle或Maven编译和构建此类Java项目相比,在这里是强制性的,这些工具使用自己的底层构建过程并运行特定任务,根据build.gradle或pom.xml配置生成输出,其中包含所有配置值和依赖项。

-1
给你的 Customer 类添加 setter 方法。 没有 setter 方法,你的类将无法填充数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接