Lorsque vous utilisez InitBinder pour la vérification, certaines des données soumises dans ce contrôleur doivent être de nature commerciale, c'est-à-dire qu'elle ne sera utilisée que dans des situations de vérification relativement complexes. La plus simple vérification de formulaire peut être résolue en utilisant la vérification de l'annotation.
Pour l'utilisation de la vérification de l'annotation, veuillez vous référer à: http://www.vevb.com/article/136448.htm
Une chose à noter ici: initbinder et annotation ne peuvent choisir que l'une des deux vérifications. Si initbinder est utilisé, la vérification d'annotation ne peut pas être utilisée.
Les configurations précédentes de web.xml et spring.xml ne seront pas répétées, veuillez vous référer à la configuration dans le lien ci-dessus. Exactement la même chose.
Téléchargez directement le code:
1. Classe d'entité du modèle User5
package com.my.controller.bean; import java.util.date; public class user5 {private long id; nom de chaîne privé; mot de passe de chaîne privé; Date privée CreateTime; Âge privé; 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 Date getcreatetime () {return CreateTime; } public void setCreateTime (date CreateTime) {this.createtime = CreateTime; } public int getage () {return âge; } public void Setage (int Age) {this.age = age; }}2. Ajouter un nouveau validateur:
package com.my.controller.validator; import org.springframework.sterreotype.component; import org.springframework.validation.errors; import org.springframework.validation.validyUtilsi com.my.controller.bean.user5; @componentpublic class testValidator implémente validator {@Override public booléen supports (class <?> paramclass) {return user5.class.equals (paramclass); } @Override public void validate (objet obj, erreurs erreurs) {user5 user = (user5) obj; ValidationUtils.rejectifEmpyorWhitespace (erreurs, "nom", "valid.name", null, ""); if (user.getage () <18) {errors.rejectValue ("Age", "valid.agemin", nouvel objet [] {"Age", 18}, "L'âge ne peut pas être inférieur à {1} ans"); }}}@Component doit être ajouté ici et DI est injecté
3. Contrôleur
Package com.my.Controller; Import Java.util.linkedhashmap; import java.util.list; import java.util.map; import javax.validation.valid; import org.springframework.beans.factory.annotation.Autowired; Import Org.springFramework.Beans.factory.annotation.qualifer; org.springframework.sterreotype.controller; import org.springframework.validation.bindingResult; import org.springframework.validation.Fielderror; import org.springframework.validation.validator; import org.springframework.web.bind.webdatabder; org.springframework.web.bind.annotation.initbinder; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestMethod; org.springframework.web.servlet.modelandView; import com.my.controller.bean.user5; @ contrôleur @ requestmapping (value = "binder") classe publique TestinitBinderController {@Autowired @Qualifier (value = "testvalidator") Validator privé Validator; @InitBinder private void initbinder (webDatabinder Binder) {Binder.SetValidator (validator); } @RequestMapping (méthode = requestMethod.get) public String index () {return "/ TesInitBinder / index"; } @RequestMapping (value = "add", méthode = requestMethod.Post) public ModelAndView add (@ModelAttribute @valid user5 user, bindingResult Result) {ModelAndView View = new ModelAndView ("TesInitBinder / index"); View.AddObject ("utilisateur", utilisateur); if (result.haserrors ()) {list <fieldorror> errS = result.getFielDerrors (); Map <string, string> maperrors = new LinkedHashMap <String, String> (); pour (Fielderror err: errS) {System.out.println ("ObjectName:" + err.getObjectName () + "/ tfieldName:" + err.getfield () + "/ tfieldValue:" + err.getRejectEdValue () + "/ tMessage:" + err.getDefaultMessage ()); MAPERRORS.PUT (err.getfield (), err.getDefaultMessage ()); View.AddObject ("erreurs", MAPERROR); } vue de retour; } vue de retour; }}Injectez un validateur dans le contrôleur.
En fait, en utilisant initBinder, la méthode err.getDefaultMessage () dans le contrôleur ADD ne peut pas obtenir le message correct correspondant. Vous pouvez voir le résultat d'impression d'entrée final.
4. Voir
<% @ 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 = "form" 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 "> </ title </ title> </ head> <pody> <formulaire: formulaire: formulaire Action = "/ TestSpringMvc1 / Binder / Add" Method = "Post" ModelAttribute = "User5"> Nom d'utilisateur: <Input Type = "Text" id = "Name" Name = "Name" Value = "$ {user.name}" /> <br/> Mot de passe: <Input Type = "Text" id = "Passway" Name = "Passway" value = "$ {user.password}" /> <br/> Age: Entrée = "$ {user.password}" /> type = "text" id = "age" name = "age" value = "$ {user.age}" /> <br/> <input type = "soume" value = "add" /> <hr /> error: <br/> <form: errors path = "*"> </ form: errers> </ form: form> </ body> </ html>Notez que vous ne pouvez utiliser que <formulaire: erreurs /> pour obtenir des informations d'erreur, et ce <formulaire: erreurs /> doit être dans <formulaire: form />.
5. Test des résultats
Cliquez sur le bouton Ajouter:
Impression:
Vous pouvez voir que les informations correctes de l'erreur ne peuvent pas être obtenues ici
En fait, lorsque les données soumises dans une page de formulaire très complexe ont une certaine logique métier, InitBinder ne doit pas être beaucoup utilisée, car plusieurs fois, nous pouvons utiliser une carte pour y insérer des erreurs et la lire sur la page. Par exemple:
Map <string, string> erreurs;
errors.add ("nom", "Le nom d'utilisateur ne peut pas être vide!");
:
:
Vous n'avez qu'à utiliser:
<span style = "Color: Red;"> $ {errors.name} <span>Fais-le c'est tout.
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.