Accessibilité
Ressources pour les développeurs

Table des matières

Comment créer de meilleurs formulaires avec ColdFusion MX 7

Validation des champs

Les balises cfform donnaient de bons résultats : elles étaient bien plus rapides et plus fluides ; mais il leur manquait tout de même quelque chose. Il leur fallait de nouveaux types de validation, comme email et URL, ce que les utilisateurs demandaient depuis plusieurs années. Le fait que la validation JavaScript n'était disponible que du coté client était également un problème (par exemple, si JavaScript n'était pas activé du coté client). La validation côté serveur prise en charge était également peu appréciée des utilisateurs car elle obligeait les développeurs à utiliser des champs HTML masqués. En outre, la validation côté serveur ne permettait pas de valider tous les mêmes types de données que la validation JavaScript côté client, ce qui entraînait une incohérence certaine entre les différentes techniques de validation.

Nous avons donc synchronisé toutes les routines de validation JavaScript côté client et les bibliothèques de validation du serveur. Cependant, quelques différences n'ont pas pu être changées, pour des raisons de compatibilité en amont. Par exemple, la validation des dates côté serveur supporte un plus grand nombre de formats que la validation JavaScript côté client ; cependant, pour la validation d'adresse e-mail du côté client ou serveur, ColdFusion utilise la même expression régulière. Bien entendu, le fait de devoir appeler ces routines de validation obligeait encore à programmer un champ HTML masqué pour le déclenchement de chaque champ. Bien que l'utilisation de champs masqués reste un moyen pratique de valider des données sur un intranet ou dans d'autres applications utilisées par des personnes de confiance, l'emploi de champs masqués pour valider des données sur un site public présente un danger : quelqu'un pourrait retirer les champs masqués afin d'éviter la validation. Nous avons répondu à ce problème.

Si vous utilisez les champs masqués, ColdFusion MX 7 en automatise la création. Comme vous le savez sans doute, il fallait auparavant programmer un champ de saisie et un champ masqué pour la validation côté serveur. Il n'est désormais plus nécessaire de mémoriser la syntaxe cryptique de déclenchement de la validation dans ColdFusion.

Avant :

<cfinput type="text" name="fname" required="true">
	<input type="hidden" name="fname_required" value="Fname est requis">

Après (dans ColdFusion MX 7) :

<cfinput type="text" name="fname" required="true" validateat=" onServer">

Le nouvel attribut validateAt="" est utilisé pour définir trois valeurs d'emplacement de validation : onSubmit (l'option par défaut), onBlur (un nouveau type d'emplacement de validation) et onServer. Vous pouvez combiner ces valeurs ou spécifier les emplacements de validation que vous souhaitez utiliser sous la forme d'une liste séparée par virgules :

validateAt="onBlur,onServer"

La validation de toutes les variables transmises dans une page ColdFusion – tout spécialement une page d'action de formulaire – est une pratique commune. Nous avons simplifié ce processus en ajoutant l'accès à toutes les routines de validation côté serveur dans la balise cfparam à l'aide de l'attribut type. Cela permet de vérifier que la variable existe et, en même temps, de valider la valeur en tant que type de données spécifique, le tout dans une seule balise (ce qui comprend même le type de validation "RegEx").

Exemple :

<cfif isDefined("form.submit")>
     <cfparam name="form.email" type="email">
     <cfparam name="form.password" type="regex" pattern="[a-z]{1,3}[0-9]{6,10}">

     <!--- 
Code d'envoi du formulaire
--->
</cfif>

Cette solution n'étant pas forcément adaptée à toutes les applications, nous avons ajouté une nouvelle fonction ColdFusion, la fonction IsValid(). Cette fonction est utilisée pour appeler des routines de validation pour n'importe quelle variable (par exemple, la validation peut être effectuée par rapport à une valeur récupérée d'une base de données).

Exemple :

<cfif isValid("email", maRequête.emailUtilisateur)>
     <cfmail from="webmaster@monSite.fr"
          To="#maRequête.emailUtilisateur#"
          Subject="Mise à jour du système">

          Attention : à 14h, nos systèmes...
     </cfmail>
</cfif>

Là encore, nous aurions pu nous contenter de cette solution étant donné que les balises cfform fournissaient de nouvelles fonctionnalités solides. Mais nous savions que cette nouvelle base stable et puissante allait nous permettre de réinventer la façon dont les formulaires sont utilisés dans les applications web.