Introducción
La verificación de anotación utilizando Spring MVC puede verificar directamente los datos simples del modelo de vista. Tenga en cuenta que esto es simple. Si la verificación de datos del modelo requiere una lógica comercial más compleja, es difícil usar la anotación para la verificación.
La siguiente es la verificación de la anotación utilizando Spring MVC, más un ejemplo de verificación de anotación personalizada en Tel, que tiene:
1. Apoyo multilingüe (internacionalización)
2. Convierta primero los datos predeterminados. Por ejemplo, si se pasa un tipo int y una fecha en un valor vacío, se lanzará una excepción. Se administrará el valor predeterminado dado.
Veamos primero la configuración:
1. Web.xml
<? xml versión = "1.0" encoding = "utf-8"?> <web-app versión = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/javaeeee/web-app_3_0.xsd"> <Wantswname> 1</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <listener> <Oyerer-class> org.springframework.web.context.contextlogloaderListener </oyer-class> </oyeyer> <welcome-file-list> <call welcome-file> index.jsp </welcome-file> </welcome-file-list> </web-app>
No hay nada que decir aquí, solo agregue la configuración Spring.xml a ContextConfiglocation
2. Spring.xml
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://wwww.springframe.org/sChemC" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd ">" < <Bean> <Property Name = "Prefix" Value = "/Web-Inf/Views/"/> <Property Name = "Suffix" Value = ". JSP"/> <!-puede estar vacío, conveniente para implementar la lógica de la clase de interpretación basada en la extensión-> <Property Name = "View" Value = "ORG.SpringframeWork.web.servlet.view.view.jstlView Archivo de recursos: mensajes.properties-> <bean id = "mensajesurce"> <propiedad name = "basenames"> <list> <alon valor> mensajes </valor> </list> </propiets> </bean> <!-verificador-> <bean id = "validador"> <name de propiedad = "validationMessageSource" ref = "mensajsource"/> </bean> <!-Validator de validador " id = "Conversionservice"> <Property Name = "Converters"> <List> <Bean/> <Bean/> </List> </Property> </Bean> </Beans>
Agregue el servicio de conversión a <mvc: anotación-conducida/>, y luego agregue el convertidor predeterminado del sistema al servicio de conversión. Por ejemplo, hay intConverter y DataConverter anterior. Por supuesto, también se puede personalizar y otros tipos, lo cual es global.
Las propiedades multilingües se agregan al validador de validador. Por supuesto, el lenguaje multilingüe de Spring se basa en el idioma de aceptación del encabezado HTTP.
3. Controlador
paquete com.my.controller; import java.util.list; import javax.validation.valid; import org.springframework.stereotype.controller; import og.springframework.validation.bindingresult; import org.springframework.validation.fielderror; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestMapping; import org.springframework.web.bind.annotation.requestmethod; import og.springframework.web.servlet.modelandview; com.my.controller.bean.user4;@controler@requestmapping (value = "av") clase pública testAnnotationValidController {@RequestMapping public ModelAndView index () {modelandView View = new ModelAndView ("/testAnTationValid/index", "user4", new User4 ()); Vista de regreso; } @RequestMapping (valor = "/add", método = requestmethod.post) public modelandView add (@modelattribute @Valid User4 User, BindingResult Result) {ModelAndView View = new ModelAndView ("/testAnnotationValid/index"); ver.AdDObject ("user4", usuario); if (result.haserrors ()) {List <SilDerRor> errores = result.getFielderRors (); for (fielderror err: errores) {system.out.println ("objectName:" + err.getObjectName () + "/tfieldName:" + err.getField () + "/tfieldvalue:" + err.getRegEdValue () + "/tMessage:" + err.getDefaultMessage () + "/tcode:"); }} Vista de retorno; }}Este es un controlador simple, además, hay una anotación de @Valid, que se requiere, sin agregar esto, la verificación de la anotación no funcionará
4. User4.java Model Entity Clase
paquete com.my.controller.bean; import java.util.date; import javax.validation.constraints.max; import javax.validation.constraints.min; import javax.validation.constraints.notnull; import javax.validation.constraints.past; import javax.validation.constrainstain javax.validation.constraints.size; import org.hibernate.validator.constraints.email; import org.hibernate.validator.constraints.length; import.Hibernate.Validator.Constraints.notblank; User de clase pública 4 {ID de largo privado; @Notblank (mensaje = "{válido.name}") Nombre de cadena privada; @Length (min = 4, max = 20, mensaje = "{válido.password}") contraseña de cadena privada; @Notblank (mensaje = "{válido.required}") @email (mensaje = "{válido.email}") Correo electrónico de cadena privada; @Notnull (message = "{válido.Required}") privado booleano casado; @Min (valor = 18, mensaje = "{válido.agemin}") @max (valor = 100, mensaje = "{válido.agemax}") private int Age; @Notnull (mensaje = "{válido.required}") @past (mensaje = "{válido.birthday}") Cumpleaños de fecha privada; @Pattern (regexp = "^[a-Za-z] {2,} $", mensaje = "{válido.address}") Dirección de cadena privada; @Size (min = 1, mensaje = "{válido.likesmin}") String private [] me gusta; @com.my.controller.validator.tel (mensaje = "{válido.tel}", min = 3) cadena privada tel; public Long getId () {return id; } public void setid (ID long) {this.id = id; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public String getPassword () {return Password; } public void setPassword (String Password) {this.password = contraseña; } public String getEmail () {return email; } public void setEmail (correo electrónico de cadena) {this.email = correo electrónico; } public boolean isMarried () {return casado; } public void setmarried (boolean casado) {this.married = casado; } public int getAge () {return Age; } public void setAge (int Age) {this.age = edad; } Fecha pública GetBirthday () {regreso de cumpleaños; } public void setBirthday (cumpleaños de fecha) {this.birthday = cumpleaños; } public String getAddress () {Dirección de retorno; } public void setAddress (dirección de cadena) {this.address = dirección; } public String [] getLikes () {return -me gusta; } public void setLikes (string [] me gusta) {this.likes = me gusta; } public String getTel () {return Tel; } public void Settel (String Tel) {this.tel = Tel; }}Además de @Tel, los otros son anotaciones que vienen con la primavera. Por supuesto, hay otros. Búscalo usted mismo.
5. Message. Properties
Valid.Required = El valor de campo no se puede vaciar válido.name = el nombre de usuario no puede estar vacío válido.password = la contraseña mínima es válida.agemin = edad no puede ser menor que {1} años de edad válida.agemax = edad no puede ser mayor que {1} años válido. La preferencia mínima no puede ser inferior a 1 válida.tel = el número de teléfono móvil no puede ser menor que {min}El valor del mensaje correspondiente de la anotación del modelo User4. Si necesita un multilingüe internacional, solo necesita agregar un archivo adicional con el nombre de Messages_en_us.Properties.
6. @Tel
paquete com.my.controller.validator; import java.lang.annotation.ElementType; import java.lang.annotation.retention; import java.lang.annotation.retentionPolicy; import java.lang.annotation.target; import javax.validation.constrine; import javax.validation.payload; @Target ({elementType.field, elementType.method})@retención (retenciónPolicy.runtime) @Constraint (validadaDBY = TelValidator.class) public @interface Tel {int min () predeterminado 0; String Message (); Clase <?> [] Grupos () predeterminado {}; Clase <? extiende la carga útil> [] Payload () predeterminado {};}Crea una nueva interfaz. Tenga en cuenta que la interfaz de anotación Java está escrita así: @Interface
Telvalidator:
paquete com.my.controller.validator; import javax.annotation.resource; import javax.validation.ConstraintValidator; import javax.validation.constraintValidatorContex RestrictValidator <Tel, String> {@Resource private ResourceBundLemesSageSource Messagesurce; privado tel tel; @Override public void Initialize (Tel Tel) {this.tel = Tel; } @Override public boolean isValid (valor de cadena, restrictValidatorContext restrictContext) {boolean isValid; if (value! = null && value.length ()> = tel.min ()) {isValid = true; } else {isValid = false; } if (! isValid) {restrictContext.disableFaultConstraintViolation (); restrictContext. } return isValid; }}Este es el método de implementación de verificación de @Tel.
7. convertidor
paquete com.my.controller.converter; import org.springframework.core.convert.converter.converter; public class intConverter implementa converter <String, integer> {@Override public Integer Convert (string text) {if (text == null || "" .equals (text)) {return 0; } else {try {integer value = integer.parseInt (text); valor de retorno; } capt (excepción e) {return 0; }}}} paquete com.my.controller.converter; import java.text.parseException; import java.text.simpledateFormat; import java.util.date; import og.springframework.core.convert.converter.converter; public class DataConver implementa Converter <string, date> { @@Soverride Public Date Converter (CONVERTER); dateFormat = new SimpleDateFormat ("yyyy-mm-dd"); dateFormat.setLenient (falso); intente {return dateFormat.Parse (texto); } catch (ParseException e) {E.PrintStackTrace (); } return null; }}Estos dos son convertidores predeterminados de tipo global.
8. Prueba JSP
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/fmt" prefix = "fmt"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix = "fn"%> <%@ taglib = "st" uri = "http://www.springframework.org/tags"%> <%@ taglib prefix = "sf" uri = "http://www.springframework.org/tags/form"%> < "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> índice </title> </head> <body> <sf: form: Action = "$ {PageContext.Request.ContextPath}/av/add" Method = "post" modelattribute = "user4"> Nombre de usuario: <sf: input path = "name"/> <sf: errores path = "name"/> <br/> contraseña: <sf: input path = "contraseña"/> <sf: ruta de errores = "contraseña"/> <br/> contraseña Path = "Correo electrónico"/> <sf: errores path = "correo electrónico"/> <br/> edad: <sf: input path = "edad"/> <sf: errores path = "edad"/> <br/> cumpleaños: <sf: input path = "birthday"/> <sf: errores path = "/>> <br/> dirección: <sf: ruta de entrada =" dirección "/> <sf: errores de errors birthding" Casado: <sf: radioButton Path = "casado" etiqueta = "y" valor = "true"/> <sf: errores path = "casado"/> <br/> me gusta: <sf: checkbox path = "le gusta" fútbol "value =" fútbol "/> <sf: checkbox path =" me gusta "etiqueta =" value "value =" badminton "/> <sf: checkbox sath a la caja de checkbox". value = "pingpong"/> <sf: errores path = "me gusta"/> <br/> tel: <sf: input path = "tel"/> <sf: errores path = "tel"/> <br/> <input type = "envíe" valor = "add"/> <hr/> errores: <br/> <sf: rutin de errores = "*"> </sf: errores> <hh hr/> errores: <br/> <sf: rutin de errores = "*"> </sf: errores> <hh hr/> errores: <br/> <sf: rutin de errores = "*"> </sf: errores> <hr/> errores: <br/> <sf: rutina de errores = "*"> </sf: errores> <hr/> errores: <br/> <sf: rutina de errores = "*"> </sf: errores> <hh hr/c. elementos = "$ {user4.likes}" var = "item"> $ {elemento}, </c: foreach> </sf: form> </body> </html>Tenga en cuenta que el valor de atributo ModelAttribute en forma corresponde al nombre de la clase User4, comenzando con minúsculas, de lo contrario ocurrirá un error.
9. Resultados de la interfaz de usuario de la página:
Después de hacer clic en el botón Agregar:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.