休眠验证器不起作用(它允许空值传递)



我试图使用Hibernate Validator,但@NotNull和@Size注释似乎对我不起作用。它们允许null值和定义大小之外的值通过。其他所有Hibernate Validater注释也不起作用。你们中有人知道为什么吗?看起来一切都很好,但仍然不起作用。。。

以下是我的类、视图和xml,如果需要的话,还有一个指向整个项目的链接。

https://www64.zippyshare.com/v/fXFogBpU/file.html

提前感谢

Customer.java

package springdemo.content;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class Customer {
private String firstName;
@NotNull(message = "is required")
@Size(min = 1, message = "is required")
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}

CustomerController.java

package springdemo.controllers;
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import springdemo.content.Customer;
import javax.validation.Valid;
@Controller
@RequestMapping("/customer")
public class CustomerController {
// add an InitBinder to convert and trim input settings
// remove leading and trailing whitespace
// resolve issue for our validation
@InitBinder
public void initBinder(WebDataBinder dataBinder) {
StringTrimmerEditor stringTrimmerEditor = new StringTrimmerEditor(true);
dataBinder.registerCustomEditor(String.class, stringTrimmerEditor);
}
@RequestMapping("/showForm")
public String showForm(Model theModel) {
theModel.addAttribute("customer", new Customer());
return "customer-form";
}
@RequestMapping("/processForm")
public String processForm(@Valid @ModelAttribute("customer") Customer theCustomer,
BindingResult theBindingResult) {
System.out.println("Last name: |" + theCustomer.getLastName() + "|");
if (theBindingResult.hasErrors()){
return "customer-form";
} else {
return "customer-confirmation";
}
}
}

客户表单.jsp

<%--
Copyright: kuba, 08.01.19 : 19:22
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<title>Customer Registration Form</title>
<style>
.error {color:red}
</style>
</head>
<body>
<i>Fill out the form. Asterisk (*) means the field is required.</i>
<br><br>
<form:form action="processForm" modelAttribute="customer">
First name: <form:input path="firstName"/>
<br><br>
Last name (*): <form:input path="lastName"/>
<form:errors path="lastName" cssClass="error"/>
<br><br>
<input type="submit" value="Submit data"/>
</form:form>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>spring-mvc-demo</display-name>
<!-- Spring MVC Configs -->
<!-- Step 1: Configure Spring MVC Dispatcher Servlet -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc-demo-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Step 2: Set up URL mapping for Spring MVC Dispatcher Servlet -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

springmvc演示servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>spring-mvc-demo</display-name>
<!-- Spring MVC Configs -->
<!-- Step 1: Configure Spring MVC Dispatcher Servlet -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc-demo-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Step 2: Set up URL mapping for Spring MVC Dispatcher Servlet -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>learning</groupId>
<artifactId>springmvcdemo3</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b09</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/javax.servlet.jsp.jstl-1.2.1.jar</systemPath>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl-api</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/javax.servlet.jsp.jstl-api-1.2.1.jar</systemPath>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/commons-logging-1.2.jar</systemPath>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.14.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>6.0.14.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-osgi</artifactId>
<version>6.0.14.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>6.0.14.Final</version>
</dependency>
<dependency>
<groupId>javax.persistence-api</groupId>
<artifactId>persistence-api</artifactId>
<version>2.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/javax.persistence-api-2.2.jar</systemPath>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.7</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/joda-time-2.9.7.jar</systemPath>
</dependency>
<dependency>
<groupId>jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/jsoup-1.8.3.jar</systemPath>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/log4j-1.2.17.jar</systemPath>
</dependency>
<dependency>
<groupId>paranamer</groupId>
<artifactId>paranamer</artifactId>
<version>2.8</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/paranamer-2.8.jar</systemPath>
</dependency>
<dependency>
<groupId>classmate</groupId>
<artifactId>classmate</artifactId>
<version>1.3.4</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/classmate-1.3.4.jar</systemPath>
</dependency>
<dependency>
<groupId>javax-el</groupId>
<artifactId>javax-el</artifactId>
<version>3.0.1-b09</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/javax.el-3.0.1-b09.jar</systemPath>
</dependency>
<dependency>
<groupId>jboss-logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.2.Final</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/jboss-logging-3.3.2.Final.jar</systemPath>
</dependency>
<dependency>
<groupId>validation-api</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/validation-api-2.0.1.Final.jar</systemPath>
</dependency>
</dependencies>
</project>

为了使验证工作,Spring框架需要一个验证器bean。您需要在spring-mvc-demo-servlet.xml中创建它,如下所示-

<bean id="validator" class="org.hibernate.validator.HibernateValidator" />

最新更新