|
Struts - Un framework MVC pour vos applications J2EE
5.2.Fichiers de configuration
5.2.1.Dans le fichier struts-config.xml
Ce framework de validation nécessite donc l’utilisation de deux fichiers de configuration que l’on va « déclarer », tels des plugins, dans le fichier struts-config.xml. Pour cela on va utiliser la balise <plug-in> et lui indiquer les chemins vers nos deux fichiers XML:  Définition de la balise <plug-in> :
plug-in |
Élément racine de la définition. On a une balise plu-gin pour chaque "plugin" ajouté. className : attribut de la balise plug-in, il permet de définir le chemin de la classe à instancier,interne ou externe à Struts. Cela signifie que l’on peut parfaitement créer son propre framework de validation voire un framework d’une toute autre utilité. |
set-property |
Si la classe instanciée (className) prend des arguments en paramètre, ils seront définis dans cette balise. On a donc une balise set-property pour chacun des arguments. property : attribut de la balise set-property, il permet de spécifier le nom de l’argument. values : attribut de la balise set-property, il permet de spécifier la valeur de l’argument défini dans property. |
Nous venons donc de spécifier une nouvelle balise plug-in, tout comme on l’a fait pour les Tiles précédemment, et deux nouveaux fichiers. Voyons donc plus en détail ce que sont ces fichiers et à quoi ils vont nous servir.
5.2.2.Le fichier validator-rules.xml :
Fourni avec le plugin, ce fichier XML défini les règles que l’on pourra utiliser pour tester les valeurs des champs. Il permet d’effectuer le lien entre le type de validation (champ requis, champ email …) et le chemin vers la méthode et la classe correspondante qui permettront d’effectuer l’opération de vérification des données (valeur du champs). De base, Struts Validator gère les champs vides, les formats d’email ou de date invalides, les longueurs de champs minimum ou maximum, et bien d’autres encore. Vous trouverez la description de toutes ces validations sur le site de la fondation Apache : http://struts.apache.org/userGuide/dev_validator.html dans la section "Standard Built In Validations". Définition des balises du fichier validator-rules.xml :
form-validation |
Élément racine du fichier. |
global |
Tous les éléments inclus dans la balise global seront accessibles par l’ensemble des formulaires (sorte de constantes) |
validator |
Définit chaque type de validation et le lie la méthode correspondante. Attributs de la balise validator : name : définit le nom logique de la validation. classname : définit le chemin vers la classe contenant la méthode de validation correspondante. method : définit le nom de la méthode de validation correspondante. methodParams : type des arguments passés en paramètre. msg : définit le message d’erreur à afficher en cas de non validation du champ. depends : définit si la validation est obligatoire ou non. jsFunctionName : définit le nom de la fonction javascript correspondante qui s’executera côté client |
javascript |
Définit le code de la fonction javascript qui s’exécutera côté client. |
Nous allons voir une explication de l’un des "validator" fourni par défaut dans le fichier validator-rules de base.  Il s’agit ici du validator vérifiant qu’un champ est requis, c’est-à-dire qu’il vérifie que le champ n’est pas vide. On peut donc voir qu’il a été nommé "required", qu’il est rattaché à la méthode validateRequired de la classe FieldChecks. En cas de « non validation » du champ mappé à ce validator, le message d’erreur se trouvant un peu plus haut dans le fichier validator-rules.xml sera affiché :  Dans le cas présent, on aurait le message arg0 is required.
5.2.3.Le fichier validation.xml :
Une fois les différents types de validation définis, c’est dans le fichier validation.xml qui va nous servir a mapper les champs de nos formulaires aux validations définies dans validator-rules.xml. Définition des balises du fichier validation.xml :
form-validation |
Élément racine du fichier. |
global |
Entre ces balises vont être définies des informations qui seront accessibles, visibles par l’ensemble des formulaires de notre fichier (constantes). |
constant |
A chaque constante correspond une balise constant. |
constant-name |
Cette balise permet de définir le nom de la constante |
constant-value |
Cette balise permet de définir la valeur de la constante. On va pouvoir par exemple définir l’expression régulière définissant la valeur de cette constante |
formset |
Cette balise va englober tous les mappings de nos différents formulaires. |
form |
À chaque formulaire correspond une balise form. name : attribut de la balise form, il permet de définir le nom du formulaire concerné. Ce nom correspond à celui défini dans le fichier struts-config.xml (attribut name de la balise form-bean). |
field |
À chaque champ du formulaire nécessitant une validation correspond une balise field. property : attribut de la balise field, c’est ici que l’on va spécifier le nom de la propriété (champ) que l’on va lier à la ou les validations définie(s) dans validator-rules.xml. Ce nom de propriété est celui défini dans le Form Bean. depends : attribut de la balise field, il permet de spécifier les noms des validations associées au champ property.
- argn : balise interne à la balise field, elle permet de spécifier l’argument à donner au message d’erreur correspondant.
- var : balise interne de la balise field, elle va permettre de préciser(si besoin est) une contrainte d’intégrité pour les validations spécifiées dans l’attribut depends.
- var-name : balise interne de la balise var, on va spécifier le nom de la validation dont on veut donner la contrainte d’intégrité.
- var-value : balise interne de la balise var, on va spécifier la contrainte d’intégrité (exemple : expression régulière,...).
|
Jusqu’à maintenant nous avons un fichier validator-rules.xml qui définit une liste de validations dont les classes (et donc méthodes) se trouvent dans les fichiers commons-validator.jar et jakarta-oro.jar. On a par ailleurs un formulaire d’inscription(InscripForm) avec les champs nom(obligatoire), password(obligatoire, taille minimum de 4 caractères) et email(obligatoire, format d’email). Nous souhaitons donc vérifier la validité de ces champs. Ceci va être fait dans le fichier validation.xml. C’est en effet ici que l’on va lier chacun de nos champs aux types de validations déclarées dans validator-rules.xml. D’après les règles de la validation définies ci-dessus pour le formulaire InscripForm, on peut voir que l’on va utiliser les validators suivants (présents dans le fichier validator-rules.xml de base) : required, email et minlength. Voici donc comment se présentera notre fichier validation.xml pour la partie concernant InscripForm : Voyons l’explication du fichier ligne par ligne :
- Toutes nos définitions sont englobées dans la balise racine form-validation.
Dans un premier temps, nous définissons une constante minPass. Elle définit la longueur minimum du mot de passe. On l’englobe dans une balise <global>, ce qui signifie qu’elle sera visible par toutes les définitions de formulaire qui vont suivre. Nous avons besoin du champ password dans le formulaire InscripForm, et étant susceptible d’être réutilisé dans un autre formulaire, on a choisi de déclarer cette constante minPass avec une portée globale. Sachant que le champ password devra avoir une longueur supérieure à 4, la valeur de minPass est initialisée à 4. 
- La balise <formset> contient l’ensemble des validations des différents formulaires. Cela signifie que l’on aura une balise <form> pour chaque définition de formulaire. Dans notre cas, nous n’avons que InscripForm, nous avons donc une seule balise <form>.
Nous ouvrons donc la balise <form> et indiquons dans l’attribut name, l’identifiant de notre formulaire indiqué dans le fichier struts-config.xml, "inscripForm". Le premier champ dont nous devons vérifier la validité est le champ nom, il est en effet obligatoire. L’objet que nous allons créer ici est un objet client. Dans la balise <field> est donc indiqué le nom de la propriété concernée, c’est-à-dire nom. Étant un champ obligatoire, on ajoute le validator required(cf :valitor-rules.xml) pour l’attribut depends. On vient donc de lier le champ nom du formulaire au validator required. En cas d’erreur de validation, le message arg0 is required sera affiché (chapitre sur validator-rules.xml ). Afin de spécifier justement le nom qui sera affiché pour arg0, on utilise la balise <argn> avec 0 pour la valeur de n. La valeur de arg0 est défini dans l’attribut key, il s’agit de la valeur de client.form.require.nom du fichier de properties. On vient maintenant de définir plus précisément le message d’erreur. 
- Nous allons agir de la même manière que pour le champ nom avec le champ password. Ce champ est obligatoire et doit être d’une longueur minimum de 4 caractères. L’attribut depends a donc pour valeurs required et minlength.
Afin de spécifier la valeur de minlength, on utilise la balise <var>. <var-name> nous permet de spécifier le nom du validator concerné et <var-value>, la valeur, justement que l’on va affecter à ce validator. Précédemment, nous avons spécifier que la constante minPass a été initialisée en début de fichier, avec une portée globale. Nous réutilisons donc cette constante afin de l’affecter à minlength. 
- Les validators pour les champs nom et password viennent donc d’être définis. Il ne reste que le champ email dont la démarche est la même. Simplement les validators concernés sont required et email (toujours du fichier validator-rules.xml).
 Nous venons donc de :
- initialiser le plug-in Validator dans le fichier struts-config.xml et fait les liens avec les fichiers validation.xml et validator-rules.xml.
- définir les différentes validations dans le fichier validator-rules.xml en faisant les liens avec les classes concernées.
- définir les validations à faire sur les champs de notre formulaire en faisant les liens entre ces champs et les validators (définis dans validator-rules.xml), dans le fichier validation.xml.
Cependant, nous n’avons pas parlé des Form beans ; en effet, la classe associée à notre formulaire InscripForm doit étendre la classe DynaActionForm, classe fille de la classe ValidatorForm.
|
|
 |