1. Préface
1.1. Qu'est-ce que la vérification des entrées? Pourquoi dois-je saisir la vérification?
Dans l'article précédent, nous avons appris la conversion du type de données. Nous avons mentionné deux méthodes de traitement des données de la couche de présentation. Nous avons également mentionné que les données d'entrée utilisateur doivent être de la conversion de type pour obtenir les données que nous voulons. Alors, comment déterminons-nous que les données après la conversion de type sont les données que nous voulons? C'est un peu traversé ici. Vous pouvez y penser comme ceci: un homme adulte a 18 ans, et vous voulez obtenir les données de 18 maintenant, mais l'utilisateur entre 32 et il est également correct de le convertir par type, mais les données ne sont pas ce que vous voulez. Que devons-nous faire pour le moment? La vérification d'entrée est donc utile ici.
La relation entre la conversion de type et la vérification d'entrée est: la conversion de type est la condition préalable à la vérification des entrées. Si les deux conversions de type sont erronées, il n'est pas nécessaire d'effectuer une vérification des entrées. Mais souvent, la conversion et la vérification des entrées sont effectuées en même temps.
Il existe deux types de vérification des entrées:
1. Vérification du client;
2. Vérification côté serveur. Ce que nous expliquons principalement ici, c'est la vérification côté serveur (réécrivez la méthode Validatexxx et la vérification du fichier de configuration XML)
1.2. Processus de vérification de la réécriture de la méthode Validatexxx
1. Le convertisseur de type est responsable de la conversion de type des paramètres de demande de la chaîne et définissez ces valeurs sur les valeurs de propriété de l'action.
2. Une exception peut se produire lors de l'exécution de la conversion de type. Si une exception se produit, les informations d'exception seront automatiquement enregistrées sur ActionContext. L'intercepteur d'erreur de conversion est responsable de son encapsulat dans un champ de champ.
3. Call validerxxx () Méthode via la réflexion, où xxx est le nom de méthode correspondant à la logique de traitement qui traitera la demande de l'utilisateur.
4. Appelez la méthode de classe d'action Validate
5. Si les étapes ci-dessus n'affichent pas un champ de champ, la méthode de traitement pour le traitement des demandes des utilisateurs dans l'action sera appelée. Si un champ de champ apparaît, le système sera transféré vers la vue spécifiée dans la vue logique d'entrée.
2. Vérification d'entrée
2.1. Il y a deux façons de saisir la vérification ici:
1. Réécrivez la méthode Validate ou personnalisez la méthode Validatexxx (où xxx est le nom que vous définissez, la méthode sera exécutée en premier et la méthode Validate sera exécutée)
2. Créez un nouveau XML pour la vérification
2.2. Réécrivez la méthode Validate
Dans le cadre MVC, une pièce de vérification des données standardisée est fournie. Struts2 fournit ici une méthode valide. Nous pouvons réécrire la méthode Validate pour effectuer une vérification des entrées. Cependant, il y a deux points à savoir sur la réécriture de la méthode Validate: 1. La méthode Validate sera exécutée avant la méthode d'exécution; 2. La méthode Validate exécutera des règles de vérification pour toutes les actions. Afin de distinguer une certaine action, nous pouvons utiliser la méthode Validatexxx.
Remarque: Les exemples suivants sont des exemples de conversion de type local et de validation d'entrée.
Exemple de vérification d'enregistrement simple:
Créer un nouvel utilisateur de classe d'entité:
Utilisateur
Créer une nouvelle vue: registre.jsp
<% @ page Language = "Java" ContentType = "Text / HTML; charSet = UTF-8" Pageencoding = "UTF-8"%> <% @ Taglib Uri = "/ Struts-Tags" Prefix = "S"%> <! DocType HTML Public "- // W3C // DTD HTML 4.01 Transitional // En" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" Text / html; charset = utf-8 "> <t titre> Utilisateur enregistré </taptin <form action = "registre_test"> utilisateur: <input type = "text" name = "user"> <br/> mot de passe: <input type = "mot de passe" name = "user"> <br/> mot de passe: <input type = "mot de passe" name = "user"> <br/> <input type = "soumi"
Créez une nouvelle classe de registre pour hériter des actions
package com.validatexxx; import com.opencemphony.xwork2.actsupport; // rewrite valider () et validerxxx méthodes spécifiées pour la vérification / * * Dans struts.xml, la méthode Méthode validateTest () sera appelée d'abord, puis la méthode de test est appelée après l'appel de la méthode de validate * * / public Classicing Extension ActionSupport {User l'utilisateur privé; utilisateur public getuser () {return utilisateur; } public void SetUser (utilisateur utilisateur) {this.user = utilisateur; } // 2 @Override public void validate () {System.out.println ("Réécriture de la méthode Validate"); if (null == user.getpassword () || "" .equals (user.getpassword ()) || null == user.getRepassword () || "" .equals (user.getRepassword ()))) {this.addFielDerror ("repassword", "repassword devrait être le même mot de passe"); retour; } if (! user.getPassword (). equals (user.getRepassword ())) {// Lorsque les données existent dans Fielderror, le serveur sautera automatiquement à la vue logique de l'entrée. }} // 1 public void validateTest () {System.out.println ("Méthode de vérification personnalisée: validateTest"); } // 3 public String test () {System.out.println ("test: méthode"); retourner le succès; }}Remarque: La propriété ici est l'utilisateur, donc le nom de votre paramètre de page JSP doit être écrit comme le nom de l'utilisateur d'instance, puis vous devez également créer un convertisseur de type pour renvoyer une classe remplie des données
Créez un nouveau struts.xml et stockez-le dans Web-inf / classes / strut.xml
Remarque: La méthode ici doit être définie par vous après votre méthode Valudatexxx (). Voici le test. Si vous utilisez *, Structs2 doit également configurer Strict-Method-Invocation = "false". On dit que parce que la version est trop élevée, sa sécurité a été augmentée et tout doit être ajouté pour utiliser *
Créez une nouvelle classe UserTypeConverter pour hériter de StrutSypeConverter (créer un convertisseur de type)
package com.validatexxx; importer java.util.map; import org.apache.struts2.util.strutstypeConverter; // classe de la conversion de type UserTypeConverter étend StrutstyPeConverter {@Override public Object ConvertfromString (map arg0, String [] arg1, class arg2) { System.out.println ("UserTypeConverter: Type Conversion!"); Utilisateur utilisateur = nouveau utilisateur (); user.setUsername (arg1 [0]); user.setpassword (arg1 [1]); user.setRepassword (arg1 [2]); RETOUR UTILISATEUR; } @Override public String convertToString (map arg0, objet arg1) {utilisateur u = (utilisateur) arg1; return u.getUserName () + "!"; }}Remarque: Une fois le convertisseur de ce type créé, vous devez créer un nouveau RegisterAction-Conversion.Properties et le placer dans le même répertoire.
Le contenu de ce fichier est:
Le premier est le nom de la propriété dans laquelle vous êtes dans RegisterAction, suivi du chemin spécifique vers le convertisseur de type.
Créer une nouvelle vue de réussite: Success.jsp
succès.jsp
Créer une nouvelle vue d'erreur: input.jsp
entrée.jsp
L'effet de l'exécution de code réussie est le suivant:
Page Register.jsp
La page qui a réussi à sauter est: Success.jsp
Les résultats des tests de la console sont:
Les données sautent vers UserTypeConverter pour la conversion de type, puis sautent en enregistrement, exécutent ValidateTest Method (), valider, puis renvoyer le succès, puis exécuter la vue de résultats.
Regardons l'ordre dans lequel le code échoue:
Page Register.jsp
Page d'entrée.jsp
Effet de test de la console:
Dans la méthode Validate, le code de l'auteur est: this.addFielDerror (). Comme mentionné précédemment, si une erreur est ajoutée, le serveur nous aidera automatiquement à passer à la mauvaise interface. Il renverra l'entrée et l'entrée est configurée dans strut.xml et reviendra à l'interface d'entrée.jsp.
2.3. Créer un nouveau XML pour la vérification des entrées
Créer une nouvelle interface de vue: test.jsp
<% @ page Language = "Java" ContentType = "Text / HTML; charSet = UTF-8" Pageencoding = "UTF-8"%> <% @ Taglib Uri = "/ Struts-Tags" Prefix = "S"%> <! DocType HTML Public "- // W3C // DTD HTML 4.01 Transitional // En" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" text / html; charset = utf-8 "> <itle> use xml Verification </tape> </head> <ebody> <s: Form Action =" Empinf "Method =" <s: textfield name = "name" label = "name" size = "20" /> <s: textfield name = "age" label = "age" size = "20" /> <s: soumider name = "soumi" label = "soumi" align = "Center" /> </ s: form> </ body> </ html>
Créez une nouvelle classe d'employés pour hériter des actions
Cette classe utilise la méthode Validate Override et la configuration XML, nous pouvons en choisir un pour la vérification
package com.validatexxx; importer com.opensemphony.xwork2.ActionSupport; // Utilisez la méthode Validate () pour vérifier, il s'agit de vérification côté serveur! L'employé de classe publique étend ActionSupport {Nom de chaîne privée; Âge privé; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public int getage () {return âge; } public void Setage (int Age) {this.age = age; } // La deuxième étape exécute cette méthode String public EXECUTE () {System.out.println ("Execute:" + this.age); retourner le succès; } / * Vérification à l'aide du côté serveur: réécrivez la méthode valide (); // La première étape consiste à exécuter la méthode // réécriture la méthode Validate a un défaut: chaque fois que vous utilisez la méthode Validate pour vérifier, provoquant un grand gaspillage de ressources. public void validate () {System.out.println ("valider"); if (name == null || name.trim (). equals ("")) {// Lors de l'ajout de données à cette méthode, le serveur renvoie l'entrée puis sautera sur la page input.jsp. addFielderror ("nom", "le nom est requis"); } if (âge <28 || Âge> 65) {addFielderror ("âge", "L'âge doit être entre 28 et 65"); }} * /}Configurer dans strut.xml:
Le succès.jsp et l'input.jsp ici utilisent toujours ce qui précède.
Après cela, nous devons créer un nouvel employé-validation.xml et placer le chemin dans le même répertoire que l'employé. Remarque: -validation.xml est fixe et inchangé.
Le contenu est:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Validators public "- // Apache Struts // Xwork Validator 1.0.3 // en" "http://struts.apache.org/dtds/xwork-validator-1.0.3 Type = "requis"> <Message> Le nom est requis. </ message> </ field-validator> </ field> <field name = "age"> <champ-validator type = "int"> <param name = "min"> 29 </ param> <param name = "max"> 64 </param> </ message> L'âge doit être entre 28 et 65 </sessage> </fiel
Point clé: la limite DTD de ce fichier doit être, sinon l'erreur de retour:
Error DefaultDispatcheReRrorHandler Exception s'est produite lors de la demande de traitement: [Connexion chronométrée: Connect - [Emplacement inconnu], null]
Ensuite, nous utilisons http: // localhost: 8080 / Learstrut2 / validatejsp / test.jsp pour l'accès.
Testé avec succès:
Interface test.jsp:
succès.jsp
Exemple d'échec du test:
Interface input.jsp:
L'exemple d'illustration est correct.
En fait, il existe plusieurs validateurs intégrés dans Struts2: validateur requis, validateur de chaîne requis, validateur entier, validateur de date, validateur d'expression, validateur de longueur de caractère, validateur d'expression régulière, etc. Si nécessaire, l'auteur expliquera celui-ci par un.
Ce qui précède est une explication détaillée du tutoriel de vérification des données Struts2 qui vous a été introduit par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!