IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Personnaliser message de validation


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Par défaut Personnaliser message de validation
    Bonsoir tous le monde,

    dans un formulaire j'ai un "inputText" dont le 'value' (age) est un attribut de type 'int', la validation de cela est gérée automatiquement avec jsf, car lorsque je teste en saisissant (par exemple) une lettre au lieu d'un entier dans ce champ on m'affiche le message suivant "Erreur de conversion", mais je voudrais afficher un autre message au lieu de celui ci, par exemple "l'âge doit être un entier" car ce serait plus claire aux utilisateurs.

    en cherchant sur internet je n'ai pas trouvé de solution qui me permettera de personnaliser cette validation, alors si quelqu'un pourra m'aider ce serait vraiment sympa

    merci d'avance et bonne année (ce n'est jamais trop tard :p)

  2. #2
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Par défaut
    après avoir cherché encore, j'ai trouvé que la manière pour personnaliser et de créer un fichier .properties dans le dossier WEB-INF/classes/, y ajouter le message souhaité selon le type d'erreur par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.faces.component.UIInput.COMPONENT_TYPE = veuillez tapper un entier
    puis dans faces-config.xml, ajouter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <application>
    	<message-bundle>Nom_de_ficher</message-bundle>
    </application>
    et dans le formulaire j'ajoute après le inputText la balise :

    <h:message for="idage" errorStyle="color: red"/>

    en donnat à l'inputText id ="idage"

    mais au lieu de m'afficher le message que j'ai ajouter dans le fichier .properties on m'affiche ce message :
    j_id777031446_2e508f94:idage: La donnée n'est pas un nombre valide.

    j'ai essayé tous ce que j'ai trouvé et rien ne marche, je compte sur votre gentillesse et aide, et merci d'avance

  3. #3
    Membre expérimenté
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Par défaut
    Ca me parait bizarre comment ton fichier .properties est initialisé... en Général dans un fichier properties on écrit plus un truc comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    idage=Veuillez taper un entier
    Après je n'en ai jamais utilisé pour mes erreurs donc peut être que je me trompe...

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Par défaut
    Il faut distinguer ici deux choses dans ton cas:

    • le bundle (fichier des messages) dans lequel tu places le texte de ton site (théoriquement TOUT ce qui est de l'ordre du texte) sous la forme "clef = valeur"
    • les objets messages du composants, qui sont des propriétés du composant avec des valeurs par défaut


    Dans le premier cas, c'est simplement le fichier dans lequel tu places tous les libellés, messages, etc... qui vont te permettre de paramétrer facilement ton site (en particulier s'il support plusieurs langues). Tu peux y mettre des messages de validation personnalisés, mais il faudra que tu les places toi même dans le contexte depuis ta couche métier, par ex dans un validator personnalisé :
    (dans le messages_fr.properties)
    mobile_phone_nonvalid = numéro de téléphone mobile non valide. Veuillez saisir 10 chiffres sans espace.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class MobilePhoneValidator implements Validator {
        /**
         * Constructor.
         */
        public MobilePhoneValidator() {
        }
     
        /**
         * Perform the correctness checks implemented by this Validator against the specified UIComponent. If any violations are found, a
         * ValidatorException will be thrown containing the FacesMessage describing the failure.
         * 
         * @param context FacesContext for the request we are processing
         * @param component UIComponent we are checking for correctness
         * @param value the value to validate
         */
        public final void validate(final FacesContext context, final UIComponent component, final Object value) {
     
            final ResourceBundle rb = ResourceBundle.getBundle("messages", context.getViewRoot().getLocale());
     
            if (!ValidatorUtils.validateMobilePhone((String) value)) {
                throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, rb.getString("mobile_phone_nonvalid"), null));
            }
        }
    }
    Le second t'amène à remplir un fichier (eg "errors_fr.properties") qui ressemble à ça :
    # ==============================================================================
    # Validator Errors
    # ==============================================================================
    javax.faces.validator.LengthValidator.MAXIMUM = La longueur maximale du champ ''{1}'' est ''{0}''
    javax.faces.validator.LengthValidator.MINIMUM = La longueur minimale du champ ''{1}'' est ''{0}''
    javax.faces.component.UIInput.REQUIRED = {0}: valeur requise.

    javax.faces.converter.DateTimeConverter.DATE = Veuillez saisir une date valide.
    javax.faces.converter.DateTimeConverter.DATE_detail = Veuillez saisir une date valide. Exemple: {1}

    javax.faces.converter.NumberConverter.NUMBER = Veuillez saisir un nombre.
    javax.faces.converter.DoubleConverter.DOUBLE = {2}: ''{0}'' doit être un nombre entier ou décimal.
    javax.faces.converter.DoubleConverter.DOUBLE_detail = {2}: ''{0}'' doit être un nombre entier ou décimal. Exemple: 10.5
    javax.faces.converter.IntegerConverter.INTEGER = {2}: ''{0}'' doit être un entier.
    javax.faces.converter.IntegerConverter.INTEGER_detail = {2}: ''{0}'' doit être un entier. Exemple: {1}

    javax.faces.validator.LongRangeValidator.MAXIMUM = Le maximum autoris\u00E9 pour le champ ''{1}'' est ''{0}''
    javax.faces.validator.LongRangeValidator.MINIMUM = Le champ ''{1}'' doit être supérieur ou égal à ''{0}''
    javax.faces.validator.LongRangeValidator.NOT_IN_RANGE = Le champ ''{2}'' doit \u00EAtre compris entre ''{0}'' et ''{1}''
    Dans ce fichier, tu configures les propriétés de tes composants, y compris les validators . Pour savoir quelles propriétés configurer, il faut parfois un peu tâtonner : généralement, la documentation du composant te guide. D'autres fois, il faut creuser un peu plus.

    LE tout doit être configuré dans ton faces-config de cette façon :
    <!-- =======================
    ===== APPLICATION =====
    ======================= -->
    ...
    <application>
    ...
    <locale-config>
    <default-locale>fr</default-locale>
    </locale-config>
    <resource-bundle>
    <base-name>messages</base-name>
    <var>bundle</var>
    </resource-bundle>
    <message-bundle>errors</message-bundle>
    ...
    </application>
    </faces-config>
    Au final, en ce qui concerne ton pb, réfère-toi au javax.faces.converter.IntegerConverter.INTEGER. Tu as un exemple ci-dessus.

    En espérant avoir été clair.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 46
    Par défaut
    c'était vraiment clair Roger_Rabbit merci beaucoup c'est exactement ce qui me falait, au fait mois je mettais dans le fichier .properties:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.faces.component.UIInput.COMPONENT_TYPE
    cependant je devais mettre cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.faces.converter.IntegerConverter.INTEGER.
    donc problème résolu, maintenant ça marche très bien.

    merci à toi aussi ticroch, au fait pour moi "idage" est l'id du champ sur lequel doit s'appliquer la validation et non pas celui du message que je veux personnaliser dans le fichier .properties :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:inputText id="idage" value="#{candidatureBean.age}"
                 required="true" requiredMessage="âge obligatoire">
    </h:inputText>                
    <h:message for="idage" errorStyle="color: red"/>
    donc c'est le "javax.faces.converter.IntegerConverter.INTEGER." qui représentera la 'clé' du message à afficher et alors c'est cette clé qu'on doit mettre dans le .properties.

    merci encore à vous deux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Personnaliser message d'erreur d'access
    Par Michel Hubert dans le forum Access
    Réponses: 7
    Dernier message: 11/01/2014, 18h28
  2. fermeture d'une fenetre sans message de validation
    Par josémaria dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 09/11/2006, 10h03
  3. [PHP-JS] message de validation
    Par cell dans le forum Langage
    Réponses: 14
    Dernier message: 11/07/2006, 10h46
  4. message de validation, mais le boutton ne sert à rien!!
    Par dinastar dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 03/04/2006, 23h31
  5. message SOAP valide
    Par ep31 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 08/11/2005, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo