Maison >Java >javaDidacticiel >Série d'apprentissage SpringMVC (6) Vérification des données

Série d'apprentissage SpringMVC (6) Vérification des données

黄舟
黄舟original
2017-03-03 10:58:111347parcourir

Dans les séries (Série dapprentissage SpringMVC (6) Vérification des données) et (Série dapprentissage SpringMVC (6) Vérification des données), nous avons montré comment lier les données. Après avoir lié les données, comment garantir l'exactitude des données que nous obtenons ? C'est ce dont nous allons parler dans cet article —> Validation des données.

Ici, nous utilisons Hibernate-validator pour la vérification. Hibernate-validator implémente le cadre de vérification JSR-Série dapprentissage SpringMVC (6) Vérification des données0Série dapprentissage SpringMVC (6) Vérification des données et prend en charge la vérification du style d'annotation. Nous devons d'abord aller sur http://www.php.cn/ pour télécharger le package jar requis. Ici, nous utilisons Série dapprentissage SpringMVC (6) Vérification des données.Série dapprentissage SpringMVC (6) Vérification des données.Série dapprentissage SpringMVC (6) Vérification des données.Final comme démonstration. Après décompression, hibernate-validator-Série dapprentissage SpringMVC (6) Vérification des données.Série dapprentissage SpringMVC (6) Vérification des données.Série dapprentissage SpringMVC (6) Vérification des données.Final.jar et. jboss-logging-Série dapprentissage SpringMVC (6) Vérification des données.Série dapprentissage SpringMVC (6) Vérification des données Les trois packages .0.jar et validation-api-Série dapprentissage SpringMVC (6) Vérification des données.0.0.GA.jar sont ajoutés au projet.

Configurez le fichier springservlet-config.xml dans le projet précédent, comme suit :

<!-- 默认的注解映射的支持 -->  
    <annotation-driven></annotation-driven>
    
    <bean>
        <property></property>
        <!--不设置则默认为classpath下的 ValidationMessages.properties -->
        <property></property>
    </bean>
    <bean></bean>
    <bean>  
        <property></property>  
        <property></property>  
        <property dapprentissage springmvc v des donn></property>  
    </bean>


propriété nom="basename" valeur="classpath:validatemessages"/>中Le classpath:validatemessages est le fichier où se trouve le message de vérification de l'annotation, et nous devons l'ajouter dans le dossier des ressources.

Ajoutez un ValidateController.java dans le package com.demo.web.controllers avec le contenu suivant :

package com.demo.web.controllers;import java.security.NoSuchAlgorithmException;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;import org.springframework.web.bind.annotation.RequestMethod;import com.demo.web.models.ValidateModel;

@Controller
@RequestMapping(value = "/validate")public class ValidateController {
    
    @RequestMapping(value="/test", method = {RequestMethod.GET})    public String test(Model model){        if(!model.containsAttribute("contentModel")){
            model.addAttribute("contentModel", new ValidateModel());
        }        return "validatetest";
    }
    
    @RequestMapping(value="/test", method = {RequestMethod.POST})    public String test(Model model, @Valid @ModelAttribute("contentModel") ValidateModel validateModel, BindingResult result) throws NoSuchAlgorithmException{        
        //如果有验证错误 返回到form页面
        if(result.hasErrors())            return test(model);        return "validatesuccess";     
    }
    
}


Parmi eux @Valid @ModelAttribute("contentModel") ValidateModel @Valid de validateModel signifie valider après avoir lié les données à @ModelAttribute("contentModel").

Ajoutez un ValidateModel.java dans le package com.demo.web.models avec le contenu suivant :

package com.demo.web.models;import org.hibernate.validator.constraints.Email;import org.hibernate.validator.constraints.NotEmpty;import org.hibernate.validator.constraints.Range;public class ValidateModel{
    
    @NotEmpty(message="{name.not.empty}")    private String name;
    @Range(min=0, max=Série dapprentissage SpringMVC (6) Vérification des donnéesSérie dapprentissage SpringMVC (6) Vérification des données0,message="{age.not.inrange}")    private String age;
    @NotEmpty(message="{email.not.empty}")
    @Email(message="{email.not.correct}")    private String email;    
    public void setName(String name){        this.name=name;
    }    public void setAge(String age){        this.age=age;
    }    public void setEmail(String email){        this.email=email;
    }    
    public String getName(){        return this.name;
    }    public String getAge(){        return this.age;
    }    public String getEmail(){        return this.email;
    }
    
}


Annotez le fichier où la vérification message se trouve. Ajoutez le contenu suivant au fichier validatemessages.properties :

name.not.empty=\uSérie dapprentissage SpringMVC (6) Vérification des donnéesSérie dapprentissage SpringMVC (6) Vérification des données0D\u79F0\uSérie dapprentissage SpringMVC (6) Vérification des donnéesE0D\u80FD\uSérie dapprentissage SpringMVC (6) Vérification des donnéesESérie dapprentissage SpringMVC (6) Vérification des donnéesA\u7A7A\uSérie dapprentissage SpringMVC (6) Vérification des données00Série dapprentissage SpringMVC (6) Vérification des données
age.not.inrange=\uSérie dapprentissage SpringMVC (6) Vérification des donnéesE7Série dapprentissage SpringMVC (6) Vérification des données\u9F8Série dapprentissage SpringMVC (6) Vérification des données\u8D8Série dapprentissage SpringMVC (6) Vérification des données\uSérie dapprentissage SpringMVC (6) Vérification des donnéesSérie dapprentissage SpringMVC (6) Vérification des donnéesFA\u8Série dapprentissage SpringMVC (6) Vérification des données0Série dapprentissage SpringMVC (6) Vérification des données\uSérie dapprentissage SpringMVC (6) Vérification des données6FSérie dapprentissage SpringMVC (6) Vérification des données\uSérie dapprentissage SpringMVC (6) Vérification des données00Série dapprentissage SpringMVC (6) Vérification des données
email.not.correct=\u90AE\u7BBSérie dapprentissage SpringMVC (6) Vérification des données\uSérie dapprentissage SpringMVC (6) Vérification des données7Série dapprentissage SpringMVC (6) Vérification des données0\uSérie dapprentissage SpringMVC (6) Vérification des données7Série dapprentissage SpringMVC (6) Vérification des données0\uSérie dapprentissage SpringMVC (6) Vérification des donnéesE0D\u6B6Série dapprentissage SpringMVC (6) Vérification des données\u786E\uSérie dapprentissage SpringMVC (6) Vérification des données00Série dapprentissage SpringMVC (6) Vérification des données
email.not.empty=\u7Série dapprentissage SpringMVC (6) Vérification des donnéesSérie dapprentissage SpringMVC (6) Vérification des donnéesSérie dapprentissage SpringMVC (6) Vérification des données\uSérie dapprentissage SpringMVC (6) Vérification des donnéesBSérie dapprentissage SpringMVC (6) Vérification des données0\u90AE\uSérie dapprentissage SpringMVC (6) Vérification des donnéesEF6\uSérie dapprentissage SpringMVC (6) Vérification des donnéesE0D\u80FD\u60DF\u60Série dapprentissage SpringMVC (6) Vérification des données0\uSérie dapprentissage SpringMVC (6) Vérification des données00Série dapprentissage SpringMVC (6) Vérification des données


où name.not.empty et ainsi de suite correspondent respectivement au xxx dans message= "xxx" dans le nom du fichier ValidateModel.java, le contenu suivant est le code ASCII qui est automatiquement converti lors de la saisie du chinois. Bien sûr, vous pouvez également écrire xxx directement comme contenu d'invite sans créer un autre fichier validatemessages.properties et l'ajouter. , mais c'est incorrect car il est difficile de l'encoder. Si vous l'encodez, il n'y a aucun moyen de l'internationaliser.

Ajoutez deux vues, validatetest.jsp et validatesuccess.jsp, dans le dossier des vues :

nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (6) Vérification des donnéesC//DTD HTML Série dapprentissage SpringMVC (6) Vérification des données.0Série dapprentissage SpringMVC (6) Vérification des données Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (6) Vérification des données.org/TR/htmlSérie dapprentissage SpringMVC (6) Vérification des données/loose.dtd"><meta><title>Insert title here</title>
    <form>     
        
        <errors></errors><br><br>
            
        name:<input><br>
        <errors></errors><br>
        
        age:<input><br>
        <errors></errors><br>
        
        email:<input><br>
        <errors></errors><br>

        <input>
        
    </form>  


nbsp;html PUBLIC "-//WSérie dapprentissage SpringMVC (6) Vérification des donnéesC//DTD HTML Série dapprentissage SpringMVC (6) Vérification des données.0Série dapprentissage SpringMVC (6) Vérification des données Transitional//EN" "http://www.wSérie dapprentissage SpringMVC (6) Vérification des données.org/TR/htmlSérie dapprentissage SpringMVC (6) Vérification des données/loose.dtd"><meta><title>Insert title here</title>
    验证成功!


Il convient particulièrement de noter le form:form modelAttribute="contentModel" method="post">'smodelAttribute="xxx" derrière Le nom xxx doit correspondre au @Valid correspondant @ModelAttribute("xxx") Les noms xxx sont cohérents, sinon les données du modèle et les informations d'erreur ne seront pas liées.

formulaire : erreurs chemin="nom">form:errors> affichera les informations d'erreur des attributs correspondants du modèle lorsque path="*", il s'affichera. les informations d'erreur de tous les attributs du message d'erreur du modèle.

Lancer le test :

Série dapprentissage SpringMVC (6) Vérification des données

Cliquez sur soumettre directement :

Série dapprentissage SpringMVC (6) Vérification des données

pour voir Le message d'erreur pour les paramètres s'affiche correctement.

Soumettre des données incorrectes :

Série dapprentissage SpringMVC (6) Vérification des données

Vous pouvez constater que le message d'erreur défini s'affiche toujours correctement.

Remplissez les données correctes et soumettez :

Série dapprentissage SpringMVC (6) Vérification des données

Série dapprentissage SpringMVC (6) Vérification des données

Vous pouvez voir que la vérification est réussie.

Voici les principales notes et instructions de vérification :

<.>@Digits(integer=chiffres entiers, fraction=chiffres décimaux)Vérifiez la valeur de l'élément de l'annotation La limite supérieure de. chiffres entiers et chiffres décimaux@FutureVérifiez que la valeur de l'élément de l'annotation (type de date) est postérieure à l'heure actuelle@Max(value=x)Vérifiez que la valeur de l'élément annoté est inférieure ou égale à la valeur spécifiée par @Max@Min(value=x)

Notes

Types de données applicables

Description

@AssertFalse

Booléen, booléen

La valeur de l'élément de l'annotation de vérification est fausse

@AssertTrue

Booléen, booléen

Vérifiez que la valeur de l'élément de l'annotation est vraie

@DecimalMax(value=x)

BigDecimal, BigInteger, String, byte, short, int , long et les wrappers respectifs des types primitifs. En outre pris en charge par HV : tout sous-type de Number et CharSequence

@DecimalMin(value=x)
BigDecimal, BigInteger, String, byte,short, int, long et les wrappers respectifs des types primitifs En outre pris en charge par HV : tout sous-type de Number et CharSequence

<.>

BigDecimal, BigInteger, String, byte, short, int, long et les wrappers respectifs des types primitifs Également pris en charge par HV : tout sous-type de Number et CharSequence.

java.util .Date, java .util.Calendar ; également pris en charge par HV, si l'API de date/heure Joda Time est sur le chemin de classe : toutes les implémentations deReadablePartial etReadableInstant.

BigDecimal, BigInteger, byte, short,int, long et les wrappers respectifs des types primitifs . Également pris en charge par HV : tout sous-type de CharSequence (la valeur numérique représentée par la séquence de caractères. est évalué), tout sous-type de Nombre.

BigDecimal, BigInteger, byte, short,int, long et les wrappers respectifs des types primitifs. De plus pris en charge par HV : tout sous-type de CharSequence (la valeur numérique représentée par la séquence de caractères est. évalué), tout sous-type de Nombre.

Vérifiez que la valeur de l'élément de l'annotation est supérieure ou égale à la valeur spécifiée par @Min

@NotNull

Tout type

Vérifiez que la valeur de l'élément de l'annotation n'est pas nulle

@Null

Tout type

Valider l'élément annoté La valeur est nulle

@Past

java.util.Date, java.util .Calendar ; également pris en charge par HV, si l'API de date/heure Joda Time est sur le chemin de classe : toutes les implémentations deReadablePartial etReadableInstant.

Vérifiez que la valeur de l'élément de l'annotation (type de date) est antérieure à l'heure actuelle

@Pattern(regex=regular expression, flag=)

String Également pris en charge par HV : tout sous-type de CharSequence.

Vérifiez que la valeur de l'élément annoté correspond à l'expression régulière spécifiée

@Size(min=valeur minimale , max=valeur maximale)

String, Collection, Map et tableaux Également pris en charge par HV : tout sous-type de CharSequence.

Vérifiez que la valeur de l'élément de l'annotation se situe dans la plage spécifiée de min et max (inclus), telle que la longueur des caractères et la taille de la collection

@Valid

Tout type non primitif (type de référence)

Vérifiez l'objet associé, tel qu'un objet de commande dans l'objet compte, précisez Vérifier l'objet de commande

@NotEmpty

CharSequence ,Collection, Map and Arrays

Vérifiez que la valeur de l'élément de l'annotation n'est ni nulle ni vide (la longueur de la chaîne n'est pas 0 et la taille de la collection n'est pas 0)

@Range(min=valeur minimale, max=valeur maximale)

CharSequence, Collection, Map and Arrays,BigDecimal, BigInteger, CharSequence, byte, short, int, long and the respective wrappers of the primitive types

Vérification La valeur de l'élément annoté est comprise entre les valeurs minimales et maximales

@NotBlank

CharSequence

Vérifiez que la valeur de l'élément de l'annotation n'est pas vide (non nulle et que la longueur est de 0 après avoir supprimé l'espace de début). @NotBlank s'applique uniquement aux chaînes et lors de la comparaison, les espaces dans la chaîne seront supprimés

@Length(min=limite inférieure, max=supérieure limite)

CharSequence

Vérifiez que la longueur de la valeur de l'élément de l'annotation se situe dans l'intervalle min et max

@Email

CharSequence

Vérifiez que la valeur de l'élément de l'annotation est Email, ou vous pouvez utiliser des expressions régulières et un indicateur pour spécifier un format d'e-mail personnalisé

Pour plus d'informations, veuillez vous référer à la documentation officielle : http://docs.jboss.org/hibernate/validator/Série dapprentissage SpringMVC (6) Vérification des données.Série dapprentissage SpringMVC (6) Vérification des données/reference/en-US/html/validator-usingvalidator.html

Remarque : je n'ai pas prêté attention à l'exemple de code dans les Série dapprentissage SpringMVC (6) Vérification des donnéesSérie dapprentissage SpringMVC (6) Vérification des données premiers articles auparavant. Je ne sais pas pourquoi le package téléchargé à ce moment-là n'avait pas de code. Fichier de projet .project. Par conséquent, après le téléchargement, il n'a pas pu être directement importé dans Eclipse pour être exécuté ou sur une machine virtuelle. Je l'ai à nouveau supprimé. Ces exemples de codes ne sont pas sauvegardés, mais les fichiers de code sont toujours là, vous pouvez donc le faire. créez un nouveau projet Web dynamique et importez les fichiers de configuration, les contrôleurs et les vues correspondants. Désolé pour la gêne occasionnée à tout le monde.

Ce qui précède est le contenu de la vérification des données dans SpringMVC Learning Series (6). Pour plus de contenu connexe, veuillez prêter attention à la série d'apprentissage SpringMVC (6). Site Web chinois PHP (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn