Struts 2 - Cadre de validation

Dans ce chapitre, nous examinerons plus en détail le cadre de validation Struts. Au cœur de Struts, nous avons le cadre de validation qui aide l'application à exécuter les règles pour effectuer la validation avant que la méthode d'action ne soit exécutée.

La validation côté client est généralement réalisée à l'aide de Javascript. Cependant, il ne faut pas se fier uniquement à la validation côté client. Les meilleures pratiques suggèrent que la validation doit être introduite à tous les niveaux de votre infrastructure d'application. Voyons maintenant deux façons d'ajouter une validation à notre projet Struts.

Ici, nous prendrons un exemple de Employee dont le nom et l'âge doivent être saisis à l'aide d'une simple page, et nous mettrons ces deux validations pour nous assurer que l'utilisateur entre toujours un nom et un âge qui doivent être compris entre 28 et 65 ans.

Commençons par la page JSP principale de l'exemple.

Créer une page principale

Écrivons le fichier JSP de la page principale index.jsp, qui seront utilisées pour collecter les informations relatives aux employés mentionnées ci-dessus.

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>Employee Form</title>
   </head>

   <body>
      <s:form action = "empinfo" method = "post">
         <s:textfield name = "name" label = "Name" size = "20" />
         <s:textfield name = "age" label = "Age" size = "20" />
         <s:submit name = "submit" label = "Submit" align="center" />
      </s:form>
   </body>
</html>

L'index.jsp utilise la balise Struts, que nous n'avons pas encore abordée, mais nous les étudierons dans les chapitres relatifs aux balises. Mais pour l'instant, supposons simplement que la balise s: textfield imprime un champ d'entrée et que s: submit imprime un bouton d'envoi. Nous avons utilisé la propriété label pour chaque balise qui crée une étiquette pour chaque balise.

Créer des vues

Nous utiliserons le fichier JSP success.jsp qui sera appelé au cas où l'action définie renvoie SUCCESS.

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>Success</title>
   </head>
   
   <body>
      Employee Information is captured successfully.
   </body>
</html>

Créer une action

Alors définissons une petite classe d'action Employee, puis ajoutez une méthode appelée validate() comme indiqué ci-dessous dans Employee.javafichier. Assurez-vous que votre classe d'action étend laActionSupport class, sinon votre méthode validate ne sera pas exécutée.

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class Employee extends ActionSupport {
   private String name;
   private int age;
   
   public String execute() {
       return SUCCESS;
   }
   
   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;
   }

   public void validate() {
      if (name == null || name.trim().equals("")) {
         addFieldError("name","The name is required");
      }
      
      if (age < 28 || age > 65) {
         addFieldError("age","Age must be in between 28 and 65");
      }
   }
}

Comme indiqué dans l'exemple ci-dessus, la méthode de validation vérifie si le champ «Nom» a une valeur ou non. Si aucune valeur n'a été fournie, nous ajoutons une erreur de champ pour le champ «Nom» avec un message d'erreur personnalisé. Deuxièmement, nous vérifions si la valeur saisie pour le champ «Âge» est comprise entre 28 et 65 ans ou non, si cette condition ne répond pas, nous ajoutons une erreur au-dessus du champ validé.

Fichiers de configuration

Enfin, mettons tout ensemble en utilisant le struts.xml fichier de configuration comme suit -

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">

      <action name = "empinfo" 
         class = "com.tutorialspoint.struts2.Employee"
         method = "execute">
         <result name = "input">/index.jsp</result>
         <result name = "success">/success.jsp</result>
      </action>

   </package>
</struts>

Voici le contenu de web.xml fichier -

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee"
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">

   <display-name>Struts 2</display-name>
   
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>

   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

Maintenant, faites un clic droit sur le nom du projet et cliquez sur Export > WAR Filepour créer un fichier War. Déployez ensuite ce WAR dans le répertoire webapps de Tomcat. Enfin, démarrez le serveur Tomcat et essayez d'accéder à l'URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Cela produira l'écran suivant -

Maintenant, n'entrez aucune information requise, cliquez simplement sur Submitbouton. Vous verrez le résultat suivant -

Entrez les informations requises mais entrez un mauvais champ De, disons le nom comme "test" et l'âge de 30 ans, et enfin cliquez sur Submitbouton. Vous verrez le résultat suivant -

Comment fonctionne cette validation?

Lorsque l'utilisateur appuie sur le bouton d'envoi, Struts 2 exécute automatiquement la méthode de validation et si l'un des “if”les instructions répertoriées dans la méthode sont vraies, Struts 2 appellera sa méthode addFieldError. Si des erreurs ont été ajoutées, Struts 2 ne procèdera pas à l'appel de la méthode d'exécution. Plutôt le framework Struts 2 reviendrainput à la suite de l'appel de l'action.

Par conséquent, lorsque la validation échoue et que Struts 2 revient input, le framework Struts 2 réaffichera le fichier index.jsp. Depuis, nous avons utilisé les balises de formulaire Struts 2, Struts 2 ajoutera automatiquement les messages d'erreur juste au-dessus du formulaire déposé.

Ces messages d'erreur sont ceux que nous avons spécifiés dans l'appel de la méthode addFieldError. La méthode addFieldError prend deux arguments. Le premier est leform nom du champ auquel l'erreur s'applique et le second, est le message d'erreur à afficher au-dessus de ce champ de formulaire.

addFieldError("name","The name is required");

Pour gérer la valeur de retour de input nous devons ajouter le résultat suivant à notre nœud d'action dans struts.xml.

<result name = "input">/index.jsp</result>

Validation basée sur XML

La deuxième méthode de validation consiste à placer un fichier xml à côté de la classe d'action. La validation basée sur XML Struts2 offre plus d'options de validation comme la validation par e-mail, la validation de plage d'entiers, le champ de validation de formulaire, la validation d'expression, la validation regex, la validation requise, la validation de chaîne requise, la validation de longueur de chaîne, etc.

Le fichier xml doit être nommé '[action-class]'-validation.xml. Donc, dans notre cas, nous créons un fichier appeléEmployee-validation.xml avec le contenu suivant -

<!DOCTYPE validators PUBLIC 
   "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
   "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
   <field name = "name">
      <field-validator type = "required">
         <message>
            The name is required.
         </message>
      </field-validator>
   </field>

   <field name = "age">
     <field-validator type = "int">
         <param name = "min">29</param>
         <param name = "max">64</param>
         <message>
            Age must be in between 28 and 65
         </message>
      </field-validator>
   </field>
</validators>

Le fichier XML ci-dessus serait idéalement conservé dans votre CLASSPATH avec le fichier de classe. Laissez-nous avoir notre classe d'action des employés comme suit sans avoirvalidate() méthode -

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class Employee extends ActionSupport{
   private String name;
   private int age;
   
   public String execute() {
       return SUCCESS;
   }
   
   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;
   }
}

Le reste de la configuration restera tel quel dans l'exemple précédent, maintenant si vous exécutez l'application, elle produira le même résultat que celui que nous avons reçu dans l'exemple précédent.

L'avantage d'avoir un fichier xml pour stocker la configuration permet de séparer la validation du code de l'application. Vous pouvez demander à un développeur d'écrire le code et à un analyste commercial de créer les fichiers xml de validation. Une autre chose à noter est les types de validateurs qui sont disponibles par défaut.

De nombreux autres validateurs sont fournis par défaut avec Struts. Les validateurs courants incluent le validateur de date, le validateur Regex et le validateur de longueur de chaîne. Consultez le lien suivant pour plus de détails Struts - Validateurs basés sur XML .