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 :

JSF et Validator Multilangue


Sujet :

JSF Java

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Points : 257
    Points
    257
    Par défaut JSF et Validator Multilangue
    Bonjour à tous,

    Je vous sollicite car après un grand nombre de recherche sur internet, j'ai quelques difficultés à réaliser ce qui semble être une chose aussi simple. Je gère un formulaire et je souhaiterais renvoyer un message d'erreur en fonction de la langue de l'utilisateur.

    Actuellement, la balise h:message de mon formulaire ne permet pas de choisir mon bundle de langue et me renvoie donc le message d'erreur brute...

    Ma JSF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h:form>
    <h:inputSecret id="mail" value="#{bean.user.mail}"  />
    <h:message for="mail" />
    <h:commandButton value="#{message['submit']}" action="#{bean.submit()}"></h:commandButton>                           
    </h:form>
    Mon Bean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @NotNull (message = "empty_field")
    @Pattern(regexp = "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)", message = "invalid_mail")
    @Size(min = 1, max = 254, message="incorrect_size")
    private String mail;
    Mon bundle de langue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <application>
            <locale-config>
                <default-locale>en</default-locale>
                <supported-locale>fr</supported-locale>
            </locale-config>
            <resource-bundle>
                <base-name>package.messages</base-name>
                <var>message</var>
            </resource-bundle>
        </application>
    FR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    invalid_mail=Mail invalide
    empty_field=Champ vide
    incorrect_size=Taille incorrect
    EN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    invalid_mail=Invalid mail
    empty_field=Empty field
    incorrect_size=Incorrect size
    Actuellement, la sortie du h:message me retourne a juste titre "invalid_mail", "empty_field" et/ou "incorrect_size". J'aimerai maintenant lui dire qu'il prenne ce tag et qu'il aille chercher le message d'erreur dans le bundle de langue.

    Je vous remercie par avance, si vous avez besoin de toute informations complémentaires, je reste à votre disposition.

    Bonne soirée.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    D'après la spécification, il faut créer tes propres fichiers messages
    ValidationMessages.properties
    ValidationMessages_xx_XX.properties

    Dans le bean, remplace l'attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message = "invalid_mail"
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    message = "{invalid_mail}"
    (à tester, je n'utilise pas cette fonctionnalité)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    Je vous remercie beaucoup de ce début de réponse qui m'a permis d'aller chercher au bon endroit.

    J'en profite pour compléter pour ceux qui chercherai également.

    Vous devez créer une classe héritant de ResourceBundleMessageInterpolator :


    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
    25
    26
    27
    import java.util.Locale;
    import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
    import org.hibernate.validator.resourceloading.PlatformResourceBundleLocator;
     
    public class LocaleAwareMessageInterpolator extends ResourceBundleMessageInterpolator {
     
        private Locale defaultLocale = Locale.ENGLISH;
     
        public LocaleAwareMessageInterpolator(Locale defaultLocale) {
            super(new PlatformResourceBundleLocator("ValidationMessages")); // Votre fichier contenant les messages
            this.defaultLocale = defaultLocale;
        }
     
        @Override
        public String interpolate(final String messageTemplate, final Context context) {
            return interpolate(messageTemplate, context, defaultLocale);
        }
     
        @Override
        public String interpolate(final String messageTemplate, final Context context, final Locale locale) {
            try {
                return super.interpolate(messageTemplate, context, locale);
            } catch (ExceptionInInitializerError e) {
            }
            return null;
        }
    }
    Renseigner votre Interpolator dans un fichier "validation.xml" situé dans le dossier "Web-INF/classes/META-INF/"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <validation-config
        xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-1.0.xsd">
     
        <message-interpolator>LocaleAwareMessageInterpolator</message-interpolator>
     
    </validation-config>
    Le tour est joué =)

    Les messages se basent maintenant sur la valeur de votre local.

    Pour que sa marche, il ne faut pas oublier la balise qui englobe vos messages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:view locale="VOTRE_LANGUE">
    Merci beaucoup

    Problème résolu

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/05/2013, 16h19
  2. JSF+Richfaces validation des champs dans un popupPanel
    Par elissa_assou dans le forum JSF
    Réponses: 0
    Dernier message: 02/06/2012, 21h44
  3. Converter JSF et Validator Hibernate Seam
    Par mastamx dans le forum JSF
    Réponses: 2
    Dernier message: 23/01/2009, 11h06
  4. JSF & Hibernate Validator
    Par wajdopovitch dans le forum JSF
    Réponses: 2
    Dernier message: 17/01/2009, 12h13
  5. Réponses: 10
    Dernier message: 10/09/2007, 23h35

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