English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Das Spring MVC-Framework ermöglicht es uns, benutzerdefinierte Validierung durchzuführen. In diesem Fall deklarieren wir unsere eigenen Annotionen. Wir können Validierung gemäß unserer Geschäftslogik durchführen.
In diesem Beispiel verwenden wir gleichzeitig vorgegebene und benutzerdefinierte Kommentare, um die Benutzerinput zu validieren。
pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper</artifactId> <version>9.0.12</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.13.Final</version> </dependency>
Employee.java
package com.w3codebox; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import com.w3codebox.customvalidation.Password; public class Employee { private String name; //Benutzerdefinierte Annotation @Password private String password; //Vorgedefinierte Annotation @Min(value=18, message="must be equal or greater than 18) @Max(value=45, message="must be equal or less than 45) private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
EmployeeController.java
package com.w3codebox; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class EmployeeController { @RequestMapping("/hello) public String showForm(Model theModel) { theModel.addAttribute("emp", new Employee()); return "viewpage"; } @RequestMapping("/helloagain public String processForm( @Valid @ModelAttribute("emp") Employee emp, BindingResult br) { if (br.hasErrors()) { return "viewpage"; } else { return "final"; } } }
Password.java
package com.w3codebox.customvalidation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; @Constraint(validatedBy = PasswordConstraintValidator.class) @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Password { //Fehlermeldung public String message() default "must contain jtp"; //represents group of constraints public Class<?>[] groups() default {}; //表示关于注解的附加信息 public Class<? extends Payload>[] payload() default {}; }
PasswordConstraintValidator.java
package com.w3codebox.customvalidation; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class PasswordConstraintValidator implements ConstraintValidator<Password,String> { public boolean isValid(String s, ConstraintValidatorContext cvc) { boolean result=s.contains("jtp"); return result; } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SpringMVC</display-name> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- Provide support for component scanning --> <context:component-scan base-package="com.w3codebox" /> <!--Provide support for conversion, formatting and validation --> <mvc:annotation-driven/> <!-- Define Spring MVC view resolver --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
index.jsp
<html> <body> <a href="hello">Click here...</a>/a> </body> </html>
viewpage.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <html> <head> <style> .error {color:red} </style> </head> <body> <form:form action="helloagain" modelAttribute="emp"> Benutzername: <form:inputpath="name" /> <br><br> Passwort (*): <form:passwordpath="password" /> <form:errorspath="password"cssClass="error" /> <br><br> Alter (*): <form:inputpath="age" /> <form:errorspath="age"cssClass="error" /> <br><br> <inputtype="submit"value="Submit" /> </form:form> </body> </html>
final.jsp
<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%> <!DOCTYPEhtml> <html> <body> Benutzername: ${emp.name}<br><br> Passwort: ${emp.password}<br><br> Alter: ${emp.age} <br><br> </body> </html>
Ausgabe:
Hierist dasPasswort,das wir eingeben, nicht mit der" jtp"-Sequenz.
Jetztist dasPasswort,das wir eingeben, mit der" jtp"-Sequenz.