Introduction
La vérification de l'annotation à l'aide de Spring MVC peut vérifier directement les données simples du modèle de vue. Notez que c'est simple. Si la vérification des données du modèle nécessite une logique métier plus complexe, il est difficile d'utiliser l'annotation pour la vérification.
Ce qui suit est la vérification de l'annotation à l'aide de Spring MVC, plus un exemple de vérification d'annotation personnalisé @ tel, qui a:
1. Soutien multilingue (internationalisation)
2. Convertissez d'abord les données par défaut. Par exemple, si un type INT et Date est passé dans une valeur vide, une exception sera lancée. La valeur donnée par défaut sera donnée.
Regardons d'abord la configuration:
1. web.xml
<? xml version = "1.0" encoding = "utf-8"?> <web-app version = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-ristance" XSI: ScheMalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <play-name mvc -wep_3_0.xsd "> <play-name mvc -wep_3_0.xsd"> <play-name mvc -wep_3_0.xsd "> <play-name mc-web-app_3_0.xsd"> <play-name> Test de printemps - 1 </ display-name> <context-param> <param-name> contextConfiglocation </ param-name> <param-value> classpath: printemps.xml </ param-value> </ context-Param> <Servlet> <Servlet-Name> Dispatcher </vrlett-name> <Serplet-Class> org.springframework.web.servlet.dispatcherServlet </vrlet-Class> <Init-Param> <Amam-Name> ContextConfiglocation </ param-name> <param-valent> </ param-startup> </IniT-PARAM> <Mapt-on-startup> 1 </ Load-on-Startup> <Vertlet-Name> Dispatcher </ Servlet-Name> <URL-Pattern> / </rl-Pattern> </ Servlet-Mapping> <Deurner> <auditeur-CLASS> ORG.SPRINGFRAMEWROWN.web.context.ContextLoaderListener </ auditeur-CLASS> </ Welcome-File-list> </ web-app>
Il n'y a rien à dire ici, il suffit d'ajouter la configuration Spring.xml à contextConfiglocation
2. printemps.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: tx = "http://www.springframework.org/schema/tx" xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http:" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/springframeworks 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 <!--Annotation description--> <context:annotation-config /> <!--Default annotation mapping support-> <mvc:annotation-driven validator="validator" conversion-service="conversionService" /> <!--Convert class marked @Controller annotation to bean --> <context:component-scan base-package="com.my" /> <!-- View Interpretation Class--> <Ean> <propriété name = "prefix" value = "/ web-inf / vues /" /> <propriété name = "suffix" value = ". jsp" /> <! - peut être vide, pratique pour implémenter la logique de la classe d'interprétation de la vue basée sur l'extension -> <propriété name = "ViewClass" value = "org.springframework.web.serce.Siver.View.Jstlview" / </ beebwork. messages.properties -> <bean id = "messagesource"> <propriété name = "Basenames"> <s list> <value> messages </value> </sist> </ propriété> </ bean> <! - Verifier -> <bean id = "Validator"> <propriété name = "validationMessagesource" Ref = "messages" /> </Eban> <! - CONVERT DE TYPE DE DONNÉES CUSTUMATIVES -> <EAND = "CONVERSER" <propriété name = "convertisseurs"> <s list> <bean /> <an bean /> </ list> </ propriété> </ bean> </bans>
Ajouter le service de conversion à <MVC: annotation-Driven />, puis ajoutez le convertisseur par défaut du système en services de conversion. Par exemple, il y a IntConverter et DateConverter ci-dessus. Bien sûr, il peut également être personnalisé et d'autres types, qui est mondial.
Des propriétés multilingues sont ajoutées au validateur validateur. Bien sûr, le langage multilingue de Spring est basé sur le langage d'acceptation de l'en-tête HTTP.
3. Contrôleur
package com.my.Controller; import java.util.list; import javax.validation.valid; import org.springframework.sterreotype.controller; import org.springframework.validation.bindingResult; import org.springframework.validation.Felederror; import; org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestMethod; import org.springframework.web.servert.ModmelandView; import com.my.controller.bean.user4; @ contrôleur @ requestmapping (value = "av") classe publique TestannotationValidController {@RequestMapping public ModelAndView index () {ModelandView View = new ModelAndView ("/ TestannotationValid / index", "user4", new user4 ()); vue de retour; } @RequestMapping (value = "/ add", méthode = requestMethod.Post) public ModelandView Add (@ModelAttribute @Valid User4 User, BindingResult Result) {ModelandView View = new ModelAndView ("/ TestAnnotationValid / index"); View.AddObject ("User4", utilisateur); if (result.haserrors ()) {list <fieldorror> errors = result.getFielDerrors (); pour (Fielderror ERR: erreurs) {System.out.println ("ObjectName:" + err.getObjectName () + "/ tfieldName:" + err.getfield () + "/ tfieldValue:" + err.getRejectEdValue () + "/ tMessage:" + err.getDefaultMessage () + "/ TCode:"); }} Return View; }}Ceci est un contrôleur simple, en plus, il y a une annotation de @Valid, qui est nécessaire, sans l'ajouter, la vérification de l'annotation ne fonctionnera pas
4. User4. Java Model Entity Class
package com.my.controller.bean; import java.util.date; import javax.validation.constraints.max; importer javax.validation.constraints.min; import javax.validation.constraints.notnull; importer javax.validation.constraints.past; import Javax.validing.Constrens.pattern; javax.validation.constraints.size; import org.hibernate.validator.constraints.email; import org.hibernate.validator.constraints.length; import org.hibernate.validator.constraints.notblank; classe publique user4 {private long id; @Notblank (message = "{valid.name}") Nom de la chaîne privée; @Length (min = 4, max = 20, message = "{valid.password}") Mot de passe de chaîne privée; @Notblank (message = "{valid.required}") @email (message = "{valid.email}") Email de chaîne privée; @Notnull (message = "{valid.required}") privé boolean marié; @Min (valeur = 18, message = "{valid.agemin}") @max (value = 100, message = "{valid.agemax}") private int Age; @Notnull (message = "{valid.required}") @past (message = "{valid.birthday}") anniversaire de date privée; @Pattern (regexp = "^ [a-za-z] {2,} $", message = "{valid.address}") Adresse de chaîne privée; @Size (min = 1, message = "{valid.likesmin}") String privé [] liks; @ com.my.controller.validator.tel (message = "{valid.tel}", min = 3) String privé tel; public long getID () {return id; } public void setid (long id) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public String getPassword () {return mot de passe; } public void setPassword (String Motword) {this.password = mot de passe; } public String getEmail () {return e-mail; } public void setEmail (chaîne e-mail) {this.email = e-mail; } public boolean isMarried () {retour marié; } public void setMarried (Boolean marié) {this.married = marié; } public int getage () {return âge; } public void Setage (int Age) {this.age = age; } Public Date getBirthday () {retour anniversaire; } public void SetBirthday (date d'anniversaire) {this.birthday = anniversaire; } public String getAddress () {return adresse; } public void setAddress (adresse de chaîne) {this.address = adresse; } public String [] getLikes () {return likes; } public void setLikes (String [] likes) {this.likes = likes; } public String gettel () {return tel; } public void Settel (String tel) {this.tel = tel; }}En dehors de @Tel, les autres sont toutes des annotations qui viennent avec le printemps. Bien sûr, il y en a d'autres. Recherchez-le vous-même.
5. Message.properties
valide.requured = la valeur du champ ne peut pas être vide valide.name = le nom d'utilisateur ne peut pas être vide valide.password = le mot de passe minimum est valide.agemin = l'âge ne peut pas être inférieur à {1} vieil valide.likesmin = la préférence minimale ne peut pas être inférieure à 1 valide.tel = Le numéro de téléphone mobile ne peut pas être inférieur à {min}La valeur de message correspondante de l'annotation du modèle User4. Si vous avez besoin d'un multilingue international, il vous suffit d'ajouter un fichier supplémentaire avec le nom de messages_en_us.properties.
6. @tel
package 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.constraine; javax.validation.payload; @target ({elementType.field, elementType.Method}) @ rétention (retentionPolicy.runtime) @Constraint (validedBy = telvalidator.class) public @Interface Tel {int min () Default 0; Chaîne message (); Classe <?> [] Groupes () default {}; Classe <? étend la charge utile> [] la charge utile () par défaut {};}Créez une nouvelle interface. Notez que l'interface Annotation Java est écrite comme ceci: @Interface
Telvalidator:
package com.my.controller.validator; import javax.annotation.resource; import javax.validation.constraintvalidator; import javax.validation.constraintValidatorContex @Resource private ResourceBundleMessageSource MessageSource; Tél privé Tel; @Override public void initialize (Tel tel) {this.tel = tel; } @Override public boolean isValid (String Value, CONSTRAINTVALIDATORCONT CONSTRAINTCONText) {Boolean isValid; if (value! = null && value.length ()> = tel.min ()) {isValid = true; } else {isValid = false; } if (! Isvalid) {CONSTRAINTCONTEXT.DISALEDEFAULTCONSTRAINTVIOLATION (); contraintContext.buildConstraintviolation withTemplate (Tel.Message ()). AddConstraintviolation (); } return isValid; }}Il s'agit de la méthode d'implémentation de vérification de @ tel.
7. Convertisseur
package com.my.controller.converter; import org.springframework.core.convert.converter.converter; public class intconverter implémente converter <chaîne, entier> {@Override public Integer convert (String text) {if (text == null || "". Equals (text)) {return 0; } else {try {Integer Value = Integer.ParseInt (texte); valeur de retour; } catch (exception e) {return 0; }}}} package com.my.controller.converter; import java.text.parseException; import java.text.simpledateformat; import java.util.date; import org.springframework.core.convert.converter.Converter DateFormat = new SimpledateFormat ("Yyyy-mm-dd"); DateFormat.SetLenient (false); essayez {return dateFormat.parse (texte); } catch (parseException e) {e.printStackTrace (); } return null; }}Ces deux sont des convertisseurs par défaut de type global.
8. Tester JSP
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <% @ Taglib uri = "http://java.sun.com/jsp/jstl/core" Prefix = "C"%> <% @ taglibbib uri = "http://java.sun.com/jsp/jstl/fmt" prefix = "fmt"%> <% @ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix = "fn"%> <% @ taglib prefix = "sT" uri = "http://www.springframework.org/tags"%> <% @ taglib prefix = "sf" uri = "http://www.springframework.org/tags/form"%> <! doctype html public // en " "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" Text / html; charset = utf-8 "> <tapie> index </Title> </-head> <body> <sf: formulaire: formulaire action = "$ {pagecontext.request.contextPath} / av / add" method = "post" ModelAttribute = "user4"> Nom d'utilisateur: <sf: entrée path = "name" /> <sf: errers path = "name" /> <br/> mot de passe: <sf: entrée path = "mot de passe" /> <sf: Errors Path = "Motway path = "e-mail" /> <sf: errors path = "e-mail" /> <br/> Âge: <sf: entrée path = "age" /> <sf: errors path = "age" /> <br/> anniversaire: <sf: entrée path = "anniversaire" Marié: <sf: radiobutton path = "marié" label = "oui" value = "true" /> <sf: errors path = "marié" /> <br/> likes: <sf: checkbox pathy = "likes" label = "football" value = "football" /> <sf: checkbox pathy = "liks" label = "badminton" valum = "badminton" /> <sf: checkbox = "pingppppp. Value = "Pingpong" /> <sf: errors path = "likes" /> <br/> Tél: <sf: input path = "tel" /> <sf: errers path = "tel" /> <br/> <input type = "soumi" value = "add" /> <hr /> errers: <br/> <sf: errors path = "*"> </ sf: errers> <hr / giel items = "$ {user4.likes}" var = "item"> $ {item}, </c: foreach> </ sf: form> </ody> </html>Notez que la valeur d'attribut ModelAttribute dans le formulaire correspond au nom de la classe User4, en commençant par les minuscules, sinon une erreur se produira.
9. Résultats de l'interface utilisateur de la page:
Après avoir cliqué sur le bouton Ajouter:
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.