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 :

Récuperer la clé d'un FacesMessage


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de issamjet
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2008
    Messages : 65
    Par défaut Récuperer la clé d'un FacesMessage
    Salut,

    je suis entrain de réaliser un générateur de fichiers de tests pour les applications JSF.
    La tache la plus importante est de récupérer les scénarios de chaque utilisateur lors de sa navigation dans une application JSF.
    La difficulté que j'ai trouvée est comment récupérer les clés des messages(FacesMessage)
    Par exemple :
    quand JSF génère un message ("Value is required") mon générateur doit automatiquement détecter la clé de ce message qui est ("javax.faces.component.UIInput.REQUIRED").

    Merci.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ca risque d'être impossible à faire (si deux clés donnent le même message final, impossible de distinguer). Pourquoi ne pas simplement te baser sur le texte dans une langue et imposer cette langue lors du test?

  3. #3
    Membre confirmé Avatar de issamjet
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2008
    Messages : 65
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ça risque d'être impossible à faire (si deux clés donnent le même message final, impossible de distinguer). Pourquoi ne pas simplement te baser sur le texte dans une langue et imposer cette langue lors du test?
    Merci tchize_ pour la réponse.
    En fait, mon travail consiste à récupérer les clés car les messages devront être personnalisés par l'utilisateur il peut écrire n'importe quoi comme message d'erreur mais la clé reste toujours invariante.
    Ma mission consiste à pouvoir récupérer la clé lors de l'envoi du message d'erreur par JSF et non pas à partir du message lui même pour la raison que vous avez mentionnée.

  4. #4
    Membre expérimenté
    Profil pro
    Dev NodeJS
    Inscrit en
    Août 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev NodeJS

    Informations forums :
    Inscription : Août 2006
    Messages : 177
    Par défaut
    Ils sont dans le contexte JSF, tu itere sur tous les messages et tu teste si la clef corresponds.

    cf. FacesContext.getMessages()

  5. #5
    Membre confirmé Avatar de issamjet
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2008
    Messages : 65
    Par défaut
    Citation Envoyé par yciabaud Voir le message
    Ils sont dans le contexte JSF, tu itere sur tous les messages et tu teste si la clef corresponds.

    cf. FacesContext.getMessages()
    Merci yciabaud

    J'ai pensé à ça mais dans ce cas on peut arriver dans une situation où il y a le même message pour deux clés différentes.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu veux les messages avant ou après le rendu? Si tu veux personnaliser les messages d'erreurs, c'est déjà standard dans JSF. Faut fouiner un peux dans les specs, y a moyen de fournir ton propre ressource bundle à JSF et les noms des clés est standard. Si tu veux la liste des messages d'erreurs pour la page courante, c'est de fait comme a dit yciabaud. Si tu veux parser la page pour choper les erreur, bonne chance :-)

  7. #7
    Membre confirmé Avatar de issamjet
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2008
    Messages : 65
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tu veux les messages avant ou après le rendu? Si tu veux personnaliser les messages d'erreurs, c'est déjà standard dans JSF. Faut fouiner un peux dans les specs, y a moyen de fournir ton propre ressource bundle à JSF et les noms des clés est standard. Si tu veux la liste des messages d'erreurs pour la page courante, c'est de fait comme a dit yciabaud. Si tu veux parser la page pour choper les erreur, bonne chance :-)
    Merci

    En fait je veux récupérer automatiquement la liste des clés des messages d'erreurs générés pour la page courante.
    Le fait de parser le fichier de ressources presente un probleme car un developpeur JSF peut personnaliser ses messages comme il veut, donc on peut trouver le même message qui a deux clés différentes. Par exemple:
    javax.faces.component.UIInput.REQUIRED=entrer une valeur ici
    Et
    javax.faces.converter.NumberConverter.NUMBER=entrer une valeur ici.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Le problème, c'est que les messages sont générés par les composants de la manière suivantes (myfaces, _MessagesUtils.java):


    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40     static void addErrorMessage(FacesContext facesContext,
    41                                 UIComponent component,
    42                                 String messageId)
    43     {
    44         facesContext.addMessage(component.getClientId(facesContext),
    45                                 getMessage(facesContext,
    46                                            facesContext.getViewRoot().getLocale(),
    47                                            FacesMessage.SEVERITY_ERROR,
    48                                            messageId,
    49                                            null));
    50     }
    51
    64     static FacesMessage getMessage(FacesContext facesContext,
    65                                    Locale locale,
    66                                    FacesMessage.Severity severity,
    67                                    String messageId,
    68                                    Object args[])
    69     {
    70         ResourceBundle appBundle;
    71         ResourceBundle defBundle;
    72         String summary;
    73         String detail;
    74
    75         appBundle = getApplicationBundle(facesContext, locale);
    76         summary = getBundleString(appBundle, messageId);
    //.......
    114         if (args != null && args.length > 0)
    115         {
    116             MessageFormat format;
    117
    118             if (summary != null)
    119             {
    120                 format = new MessageFormat JavaDoc(summary, locale);
    121                 summary = format.format(args);
    122             }
    //.....
    130
    131         return new FacesMessage(severity, summary, detail);
    132     }
    Comme tu le vois, la clé n'est stockée nulle part, on traduit directement le message d'erreur dans la langue de l'utilisateur.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2007, 18h31
  2. récuperation d'un numéro de téléphone
    Par herzleid dans le forum Delphi
    Réponses: 4
    Dernier message: 17/07/2007, 09h25
  3. Récuperer une animation flash
    Par zoullou dans le forum Flash
    Réponses: 2
    Dernier message: 05/06/2003, 00h32
  4. Récuperer les coordonnées d'un vecteur
    Par kerzut dans le forum OpenGL
    Réponses: 5
    Dernier message: 15/04/2003, 11h51
  5. Récuperer Arguments sur la ligne de commande ?
    Par Muetdhiver dans le forum x86 16-bits
    Réponses: 9
    Dernier message: 20/01/2003, 21h01

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