English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Préambule
1.1Qu'est-ce que la validation d'entrée ? Pourquoi avons-nous besoin de la validation d'entrée ?
Dans l'article précédent, nous avons appris la conversion de type de données, nous avons mentionné les deux méthodes de traitement des données de couche de représentation, et nous avons également mentionné que les données d'entrée de l'utilisateur doivent être converties en type pour obtenir les données que nous voulons. Alors, comment déterminer que les données après la conversion de type sont les données que nous voulons ? Cela est un peu complexe. Vous pouvez penser ainsi : l'âge d'un homme adulte est18ans, vous souhaitez obtenir maintenant18Ces données, mais, l'entrée de l'utilisateur32Après la conversion de type, cela est également correct, mais les données ne sont pas celles que vous souhaitez. Alors, que faire à ce moment-là ? C'est pourquoi la validation d'entrée est utile ici.
La relation entre le convertisseur de type et la validation d'entrée est que le convertisseur de type est la condition préalable de la validation d'entrée. Si le convertisseur de type échoue, il n'est pas nécessaire de procéder à la validation d'entrée. Cependant, dans de nombreux cas, le convertisseur de type et la validation d'entrée sont accomplis en même temps.
Il y a deux types de validation d'entrée :
1Validation côté client;
2Validation côté serveur. Ici, nous expliquons principalement la validation côté serveur (redéfinir la méthode ValidateXxx et la validation du fichier de configuration xml)
1.2Redéfinir le processus de validation de la méthode ValidateXxx
1Le convertisseur de type est responsable de la conversion de type des paramètres de requête de chaîne et de la définition de ces valeurs comme les valeurs attributs de l'Action
2During the execution of type conversion, exceptions may occur, if an exception occurs, the exception information will be automatically saved to the ActionContext, and the conversionError interceptor is responsible for encapsulating it into fieldError
3Call the ValidateXxx() method through reflection, where Xxx is the method name corresponding to the handling logic of the user request to be processed
4Call the Validate method of the Action class
5If the above steps do not appear fieldError, the Action method that handles the user request will be called, if fieldError appears, the system will transfer to the view specified by the input logic view.
Second, input validation
2.1There are two ways to explain input validation here:
1Rewrite the Validate method or customize the ValidateXxx method (where Xxx is the name you define, which will execute this method first, followed by the Validate method)
2Create a new xml for validation
2.2Rewrite the Validate method
In the MVC framework, a standardized data validation section is provided, Struts2Here we provide a Validate method, by rewriting the Validate method we can perform input validation, but there are two points to know when rewriting the Validate method:1Validate method will be executed before the execute method;2Validate method will execute validation rules for all actions, in order to distinguish a specific action, we can use ValidateXxx method.
Note: The following example is an example of using local type conversion and input validation together.
A simple registration verification example:
Create an entity class User:
User
Create a view: Register.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="Content-Type" content="text/html; charset=UTF-8> <title>Register User</title> </head> <body> <h2>Use the validateXXX() method for verification</h2> <form action="register_test"> User: <input type="text" name="user"><br/> Password: <input type="password" name="user"><br/> Password: <input type="password" name="user"><br/> <input type="submit" value="Submit"> </form> </body> </html>
Create a RegisterAction class that inherits from ActionSupport
package com.validatexxx; import com.opensymphony.xwork2.ActionSupport; //Rewrite the validate() and validateXXX specified methods for verification /* * In the struts.xml configuration, the method method is set to test(), and the ValidateTest() method will be called first * Then the validate method is called * After the test method is called * */ public class RegisterAction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } //2 @Override public void validate(){ System.out.println("Redéfinir la méthode Validate"); if (null == user.getPassword() || "".equals(user.getPassword()) || null == user.getRepassword() || "".equals(user.getRepassword())) { this.addFieldError("repassword", "repassword should be same password"); return; } if (!user.getPassword().equals(user.getRepassword())) { //Lorsque des données existent dans FieldError, le serveur nous aidera automatiquement à nous rediriger vers la vue logique input this.addFieldError("repassword", "repassword should be same password"); } } //1 public void validateTest() { System.out.println("Méthode de validation personnalisée : ValidateTest"); } //3 public String test() { System.out.println("test:method"); return SUCCESS; } }
Attention : ici, l'attribut est User, donc le nom du paramètre de la page JSP doit être l'instance user, puis vous devez également créer un convertisseur de type qui retourne une classe remplie de données
Créer un struts.xml, le stocker dans WEB-INF/classes/struts.xml
Attention : ici, le method doit être votre méthode ValudateXxx() que vous avez définie vous-même, dans ce cas, l'auteur utilise test. Utiliser*struts2strict doit également être configuré-method-invocation="false", cela est dû à une version trop élevée, sa sécurité a été augmentée, donc il est nécessaire de l'ajouter pour pouvoir utiliser*
Créer une classe Usertypeconverter héritant de StrutsTypeConverter (créer un convertisseur de type)
package com.validatexxx; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; //La classe de conversion de type public class Usertypeconverter extends StrutsTypeConverter { @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { System.out.println("Usertypeconverter:类型转换!"); User user = new User(); user.setUsername(arg1[0]); user.setPassword(arg1[1]); user.setRepassword(arg1[2]); return user; } @Override public String convertToString(Map arg0, Object arg1) { User u = (User)arg1; return u.getUsername();+"!"; } }
Attention : après la création du convertisseur de type, un RegisterAction doit être créé-conversion.properties, placé dans le même répertoire
Le contenu du fichier est :
Le premier est le nom de l'attribut dans RegisterAction, le second est le chemin spécifique du convertisseur de type.
Nouveau vue de succès : success.jsp
success.jsp
Nouveau vue d'erreur : input.jsp
input.jsp
L'effet réussi de l'exécution du code est le suivant :
Page Register.jsp
La page de redirection réussie est : success.jsp
Résultat du test sur la console :
Les données sont redirigées vers Usertypeconverter pour la conversion de type, puis redirigées vers RegisterAction, pour exécuter la méthode ValidateTest(), Validate, test, puis retourner SUCCESS, puis exécuter la vue de result.
Nous regardons l'ordre d'exécution du code en cas d'échec :
Page Register.jsp
Page input.jsp
Effet de test sur 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 à nous rediriger vers l'interface d'erreur. Il retournera input, et input est configuré dans struts.xml, il retournera à l'interface input.jsp.
2.3、新建xml进行输入验证
Créez l'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="Content-Type" content="text/html; charset=UTF-8> <title>Validation XML</title> </head> <body> <s:form action="empinfo" method="post"> <s:textfield name="name" label="Nom" size="20" /> <s:textfield name="age" label="Âge" size="20" /> <s:submit name="submit" label="Soumettre" align="center" /> </s:form> </body> </html>
Créez une classe Employee qui hérite de ActionSupport
Cette classe utilise la redéfinition de la méthode Validate et la configuration Xml, nous pouvons choisir l'une des deux pour la validation.
package com.validatexxx; import com.opensymphony.xwork2.ActionSupport; //Utilisez la méthode validate() pour la validation, c'est une validation côté serveur ! public class Employee extends ActionSupport { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //Deuxièmement, exécutez cette méthode public String execute(){ System.out.println("execute :"+this.age); return SUCCESS; } /* Utilisez la validation côté serveur : redéfinissez la méthode validate(); //Premièrement, exécutez cette méthode //L'écriture redondante de la méthode validate : elle utilise toujours la méthode validate, ce qui cause un gaspillage de ressources considérable. public void validate(){ System.out.println("validate"); if (name == null || name.trim().equals("")) { //Lorsque des données sont ajoutées à cette méthode, le serveur renvoie input, puis redirige vers la page input.jsp. addFieldError("name","Le nom est requis"); } if (age < 28 || age > 65) { addFieldError("age","L'âge doit être entre 28 et 65"); } } */ }
Configurer dans Struts.xml :
ici success.jsp et input.jsp utilisent encore ceux du dessus.
après quoi nous devons créer Employee-validation.xml, le chemin est placé dans le même répertoire que Employee, attention :-validation.xml est invariable
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.dtd"> <validators> <field name="name"> <field-validator type="required"> <message> Le nom est requis. </message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">29</param> <param name="max">64</param> <message> L'âge doit être compris entre 28 et 65 </message> </field-validator> </field> </validators>
Point important : la limitation dtd du fichier doit être présente, sinon il y aura une erreur :
ERREUR DefaultDispatcherErrorHandler Une exception s'est produite pendant le traitement de la requête : [Le temps de connexion a expiré : connect - [emplacement inconnu], null]
Ensuite, nous utilisonshttp ://localhost :8080/LearStruts2/ValidateJSP/Test.jspAccédez à.
Test réussi :
Interface Test.jsp :
success.jsp
Exemple de test échoué :
Interface input.jsp :
L'exemple de déclaration est correct.
En réalité, dans Struts2Il contient plusieurs validateurs intégrés : validateur obligatoire, validateur de chaîne obligatoire, validateur d'entier, validateur de date, validateur d'expression, validateur de longueur de caractères, validateur d'expression régulière... etc. Si nécessaire, l'auteur expliquera un par un.
Ce que j'ai présenté à l'éditeur est Struts2Explication détaillée du tutoriel de validation des entrées de données, j'espère que cela pourra vous aider. Si vous avez des questions, laissez-moi un message, l'éditeur répondra à temps. Je remercie également tous ceux qui soutiennent le site Web de l'agonie des enseignements !
Déclaration : le contenu de cet article est extrait du réseau, propriété de l'auteur original, contribué et téléchargé par les utilisateurs d'Internet. Le site Web ne détient pas de droits de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, le site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)