La validation dynamique de Struts

J'aborde dans ce billet un point précis de la validation de Struts : la validation dynamique de Struts avec zéro code, autrement dit uniquement de la configuration xml.

Je signale que la connaissance de notions sur Struts est indispensable à ce qui va suivre.

Au vu de mes heures de galère avec la validation dynamique de Struts 1.x, j'ai décidé d'écrire clairement les étapes afin d'épargner à d'autres de perdre des heures de recherche sur google.
Lorsque la validation dynamique ne fonctionne pas, Struts fournit peu d'indications (voire rien du tout).
Les questions fusent sur les forums au sujet de la validation dynamique (automatique).
Toutes ces questions montrent le (grand) désarroi de bon nombre de développeurs ayant tenté d'intégrer la validation dynamique basée sur les formulaires dynamiques (DynaActionForm ou DynaValidatorForm) .
Par contre lorsque cela fonctionne, c'est un grand soulagement!
Et le résultat est super!
En effet, peu de lignes de configuration permettent de gérer de façon cohérente la validation de la saisie, côté client et serveur.
Un autre bénéfice non négligeable, les messages d'erreurs sont identiques côté client et côté serveur.

Je laisse au lecteur deviner les retombées (économiques) réelles sur la qualité du projet lorsqu'il adopte la validation dynamique.

Je rappelle l'objectif:
Réaliser la validation côté client et serveur sans écrire une ligne de code. Rien que de la configuration xml!

Voici donc les étapes à respecter scrupuleusement.

LES ETAPES DE LA VALIDATION DYNAMIQUE DE STRUST

  • Etape1. DECLARER LE FORMULAIRE

Dans le fichier struts-config.xml, déclarer un formulaire de type org.apache.struts.validator.DynaValidatorForm.
Exemple:

   <form-bean name="NOM_VOTRE_FORM_DANS_STRUTS" 
       type="org.apache.struts.validator.DynaValidatorForm">
	......		
    </form-bean>

Notez bien que le type est DynaValidatorForm ainsi que le nom du formulaire car il sera utilisé par la suite.

  • Etape2. CONFIGURER LA VALIDATION DANS L'ACTION ASSOCIEE AU FORMULAIRE

Toujours dans struts-config.xml, mettre validate="true" à l'intérieur de l'action qui utilise le formulaire précédent.
Retenez bien le path de l'action car il sera utilisé dans la jsp par la suite.

  • Etape3. ACTIVER LE PLUGIN VALIDATOR

Ajouter à la fin de struts-config.xml, le bloc suivant:

 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames"
	   value="/WEB-INF/validator-rules.xml, 
                  /WEB-INF/validation.xml" />
    <set-property property="stopOnFirstError" 
           value="false"/>
 </plug-in>

  • Etape4. AJOUTER DEUX FICHIERS XML DE VALIDATION

Déposer les deux fichiers cités dans l'étape précédent dans le répertoire WEB-INF de l'application web.
Sachez que vous pouvez les récupérer sur le net.

  • Etape5. AJOUTER LES REGLES DE VALIDATION

Dans le fichier /WEB-INF/validation.xml, préciser les règles de validation que struts doit appliquer au formulaire.
Par exemple,

 <form name="NOM_VOTRE_FORM_DANS_STRUTS"> 
   <field property="NOM_PROPERTY_DU_FORM" depends="required">
	<arg key="SECONDE_CLE_MESSAGE"/>
   </field>
 </form>

  • Etape6. METTRE A JOUR DES LIBRAIRIES PROJET

Si vous n'utilisez pas l'outil maven, vérifiez la présence de commons-validator-***.jar dans le répertoire lib du projet web.
D'autres jar peuvent être nécessaires à l'exécution.

  • Etape7. DEFINIR LES CLES DES MESSAGES

Ajoutez la clé pour les messages de l'étape 5.
D'abord celle-ci:

  errors.required={0}  est obligatoire

puis écrire la seconde clé nommée "SECONDE_CLE_MESSAGE" de l'étape 5.

NOTE. Le nom du fichier properties pour les messages est signalé dans struts-config.xml


  • Etape8. MODIFIER LEGEREMENT LA PAGE JSP

Dans la jsp du formulaire, ajouter le tag :

	<html:errors/>

  • Etape9. ACTIVER LA VALIDATION JAVASCRIPT (COTE CLIENT)

Dans la page jsp de l'étape précédente, ajoutez les deux blocs suivants.

1) Le premier bloc est à insérer juste après <html:errors/>:

  <html:javascript formName="NOM_VOTRE_FORM_DANS_STRUTS"/>

2)Le second bloc est à mettre comme suit:

   <html:form action="/xxxxx.do" 
     onsubmit="return validateNOM_VOTRE_FORM_DANS_STRUTS(this);" >

le xxxxx est le nom du path de l'action définie à l'étape 2. Attention à respecter la casse.
Par exemple, si le form de l'étape 1 est nommé myForm alors il faut écrire ceci:

  <html:form action="/xxxxx.do" 
     onsubmit="return validateMyForm(this);">
  ...

LES DIFFICULTES

Les problèmes sont nombreux lorsque vous utilisez la validation dynamique.
Le framework Struts n'est pas très verbeux lorsqu'il rencontre une configuration incomplète.
Auquel cas il pourrait ignorer la validation.
Voici par exemple des solutions pour certaines difficultés que vous pourriez rencontrer.

Si une erreur de configuration dans struts-config.xml, alors la validation sera ignorée par Struts.

Si vous n'activez qu'une partie de la validation javascript (étape 9) alors vous verrez la génération du javascript dans les pages jsp
mais le contrôle javascript ne s'activera pas.

Si les clés des messages sont absentes, rien ne sera affiché et vous aurez l'impression qu'il ne se passe rien!

Soyez très RIGOUREUX sinon bonjour la galère!!
Et cette fois google ne pourra être votre ami...

Un commentaire

  1. Ce billet est un exemple manifeste d’un effort technique démesuré pour répondre à un besoin fonctionnel fondamental. En ce sens, et face à une nouvelle génération de frameworks Web, je pense que Struts est un framework archaïque.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.