Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

7avr/083

Flex Validator: Personnaliser les messages d'erreur (tooltip)

Lorsque un Validator est lancé et que la donnée n'est pas valide, il affiche un message d'erreur par défaut. Ce message dépend du type de validateur mais aussi de la manière par laquelle la validation n'a pas fonctionné. La classe Validator définit uniquement un type de message qui apparait lorsque le champ requis ne contient aucune donnée. Le message par défaut est "This field is required". Ce message peut être approprié dans certains cas, mais si vous le voulez en Français ou si vous voulez utiliser un message d'erreur personnalisé, vous pouvez en changer la valeur en utilisant la propriété "requiredFieldError" :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
	horizontalAlign="center" verticalAlign="middle" viewSourceURL="srcview/index.html">
	<mx:Form>
		<mx:FormHeading label="Formulaire Simple"/>
		<mx:FormItem label="Nom:">
			<mx:TextInput id="username"/>
		</mx:FormItem>
		<mx:FormItem>
			<mx:Button id="button" label="Envoyer"/>
		</mx:FormItem>
	</mx:Form>	

	<mx:Validator source="{username}" property="text" requiredFieldError="Veuillez entrer une valeur, merci!"/>

</mx:Application>

Flex Source Code Download: Télécharger le code source complet de l'application

This movie requires Flash Player 11

Tous les types de validateurs héritent de la propriété "required" et "requiredFieldError", vous pouvez donc fixer une valeur personnalisée de "requiredFieldError" pour tous les types de Validator. Cependant, de nombreux types de validateurs vont échouer pour d'autres raisons que le simple fait d'être requis. Par exemple, un PhoneNumberValidator peut échouer si la donnée contient un caractère invalide. Chaque type de validateur définit aussi des propriétés vous permettant de personnaliser le message d'erreur pour chaque type d'erreur. Par exemple, le code suivant personnalise le message d'erreur lorsque l'utilisateur spécifie un caractère invalide dans un numéro de téléphone:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
    horizontalAlign="center" verticalAlign="middle" viewSourceURL="srcview/index.html">
    <mx:Form>
        <mx:FormHeading label="Formulaire Simple"/>
        <mx:Label text="(entrer une lettre pour visualiser le résultat)"/>
        <mx:FormItem label="Numéro de téléphone:">
            <mx:TextInput id="phoneNumber"/>
        </mx:FormItem>
        <mx:FormItem>
            <mx:Button id="button" label="Envoyer"/>
        </mx:FormItem>
    </mx:Form>    

    <mx:PhoneNumberValidator source="{phoneNumber}" property="text" invalidCharError="Veuillez entrer des caractères valides, merci!"/>

</mx:Application>

Flex Source Code Download: Télécharger le code source complet de l'application

This movie requires Flash Player 11

Les erreurs possibles pour chaque type de validator

La liste des messages d'erreur personnalisables pour les Validator Flex de base (apparait en tooltip rouge):

Articles similaires

Commentaires (3) Trackbacks (0)
  1. Je ne comprend pas pourquoi cela ne fonctionne pas en AS, y a t'il une raison particulière.
    Voici un exemple :

    Actionscript:
    1. var validEmail:EmailValidator = new EmailValidator;
    2. validEmail.listener =  = commu;
    3. validEmailResult = validEmail.validate(commu.text);
    4. validEmail.invalidCharError = "Caractère illégal, +^* par exemple.";

  2. Salut,
    tu trouveras plus d'infos sur la validation en AS dans cet article:
    http://www.flex-tutorial.fr/2008/05/18/flex-validator-declencher-la-validation-en-mxml-et-actionscript/
    Sinon, voici un petit exemple qui marche. J'essaie de valider une adresse d*@gmail.com et je me prend le message d'erreur que j'ai mis à l'initialisation:

    MXML:
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="creationCompleteHandler(event)" viewSourceURL="srcview/index.html">
    3.     <mx:Script>
    4.         <![CDATA[
    5.             import mx.validators.EmailValidator;
    6.             import mx.events.ValidationResultEvent;
    7.             import mx.controls.Alert;
    8.            
    9.             private var emailValidator:EmailValidator ;
    10.            
    11.             private function creationCompleteHandler(event:Event):void{
    12.                 emailValidator = new EmailValidator();
    13.                 emailValidator.listener = username;
    14.                 emailValidator.invalidCharError = "caractères invalides";
    15.             }
    16.  
    17.             private function runValidators(event:Event):void{
    18.                 // lance la validation, grâce à la méthode validate() et assigne le résultat
    19.                 // à une variable
    20.                 //var validationResultEvent:ValidationResultEvent = validator.validate(null, true);
    21.                 var validationResultEvent:ValidationResultEvent = emailValidator.validate("d*@gmail.com");
    22.                
    23.                 // si le résultat de la validation est incorrect,
    24.                 // on affiche une Alert
    25.                 if (validationResultEvent.type == ValidationResultEvent.INVALID){
    26.                     Alert.show("Veuillez spécifier une valeur");
    27.                 }
    28.  
    29.             }
    30.         ]]>
    31.     </mx:Script>
    32.  
    33.     <mx:Form>
    34.         <mx:FormHeading label="Formulaire Simple"/>
    35.         <mx:FormItem id="userNameItem" label="Nom">
    36.             <mx:TextInput id="username"/>
    37.         </mx:FormItem>
    38.         <mx:FormItem>
    39.             <mx:Button id="button" label="Valider" click="runValidators(event)"/>
    40.         </mx:FormItem>
    41.     </mx:Form>
    42.  
    43. </mx:Application>

  3. Parfait.
    L'erreur dans mon code provenait de l'ordre : je lance la validation avant d'assigner une valeur spécifique au message d'erreur, en inversant ce message spécifique est bien pris en compte et écrase le message par défaut qui est en anglais.
    Merci pour ton aide :)


Leave a comment

(required)

Aucun trackbacks pour l'instant