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 :

Problème affichage rich:messages


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut Problème affichage rich:messages
    Bonjour,

    J'ai un petit soucis dans l'affichage de mes messages, qui ne fonctionne pas dans les requêtes http (mais bien en ajax).

    J'utilise le code suivant en entête de mes pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:form id="messages">
         <rich:messages errorClass="error" warnClass="warn" infoClass="info" globalOnly="true"/>
    </h:form>
    Je remplis mes messages en utilisant le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static void notice(String message){
         getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,message,null));
    }
    public static void error(String message){
         getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,message,null));
    }
    Lorsque je lie cet appel à une action ajax, tout fonctionne à merveille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a4j:commandButton value="delete" actionListener="#{userListFace.deleteAction}" reRender="UserList"/>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void deleteAction(ActionEvent event){
        try{
            userManager.delete(getUserListItem());
            FacesUtil.notice("Success");
        } catch(DataIntegrityViolationException e){
            FacesUtil.error(e.getMessage());
        }
    }
    Mais lorsque je l'utilise via une action HTML, je ne vois aucun message sur la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a4j:commandButton value="save" action="#{userFace.saveAction}" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public String saveAction(){
        userManager.save(user);
        FacesUtil.notice("Modifications enregistrées");
        return "save";
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <navigation-rule>
         <from-view-id>/pages/user.jspx</from-view-id>
         <navigation-case>
            <from-outcome>save</from-outcome>
            <to-view-id>/pages/user.jspx</to-view-id>
            <redirect/>
         </navigation-case>
        ...
    </navigation-rule>
    Quelqu'un aurait-il une idée de ce qui cloche, et de comment je pourrais faire alors passer mon message d'une page à l'autre?

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu es sur que dans les deux cas l'action est bien exécutée?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    Oui, j'ai notamment les logs hibernate qui me montrent que l'update se fait correctement...

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    le message affiché est celui avec SEVERITY_ERROR et non SEVERITY_INFO,
    utilise le facet passedMarker..

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    En Ajax avec le ActionListener, si je lui passe SEVERITY_ERROR, SEVERITY_WARN ou SEVERITY_INFO ça fonctionne...

    Par contre, je ne suis pas certain de comprendre le fonctionnement du facet passedMarker. Si je regarde sur le site de demo :
    http://livedemo.exadel.com/richfaces...ge&cid=4448033

    On ne voit jamais ce facet marker, même quand tous les champs sont bien remplis...

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    quand tu remplace rich:message par h:message ça fonctionne?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    Non plus
    Attention que c'est bien rich:messages

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    c'est bien ce que je pensais, le problème vient donc de l'action ou de l'actionListener, ça n'a rien à voir avec rich:message.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    Ok, mais tu as une idée d'où ça peut se situer alors?

    Car si tu regardes mon code, la méthode FaceUtil.notice(String message) est là même dans les deux cas, et elle est appelée de la même manière...

  10. #10
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    les deux actions sont appelées à partir d'une requerte ajax, tu utilise a4jCommandButton, tu as juste utilisé actionListener au lieu de action et ça n'a rien à voir avec ajax, si tu veux utiliser la navigation, il faut utiliser action dans les deux cas.
    tu peux utiliser l'attribut ajaxRendered avec la valeur true de rich:messages, ce qui permettrais de le mettre à jour après toute requete ajax sans l'ajouter dans le reRender.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    J'ai essayé avec AjaxRendered, je ne vois toujours pas mon message...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rich:messages ajaxRendered="true" errorClass="error" warnClass="warn" infoClass="info" globalOnly="true"/>
    J'ai aussi essayé de passer par la navigation "classique" en remplaçant a4j:commandButton par h:commandButton, avec h:messages, mais rien n'y fait, mon appli reste muette

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    essaye d'ajouter le clientId pour le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    context.addMessage("formId:componentId", message);
    où componentId correspond au champ à valider, sinon, tu peux utiliser l'id d'un input:hidden que tu déclare avec required.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    Merci pour ton aide. Ta proposition ressemblait quand même fort à un hack
    J'ai alors continué à creuser... et j'ai trouvé un début d'explication!

    Ne comprenant pas pourquoi tout fonctionnait dès que j'utilise les attributs actionListener à la place des attributs action, j'ai fouillé dans ma navigation. Et dans mon fichier faces-config, j'ai essayé de supprimer l'élément suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <navigation-rule>
         <from-view-id>/pages/user.jspx</from-view-id>
         <navigation-case>
            <from-outcome>save</from-outcome>
            <to-view-id>/pages/user.jspx</to-view-id>
             <redirect/>
         </navigation-case>
        ...
    </navigation-rule>
    Sans le redirect, tout fonctionne!

    Je suppose que l'explication est simple : qui dit redirect dit deux rendering... Le premier n'étant pas affiché, la queue de messages se vide, et au second affichage, il n'y a plus rien dedans...

    Bon, maintenant, le soucis c'est que j'aime beaucoup ces redirects... l'url de la barre d'état change correctement, le back n'a pas de comportement erratique, et je me souviens sur un précédent projet que l'absence de ceux-ci m'avaient posés de sérieux problèmes (mais je ne sais plus exactement quoi).

    Existe-t-il une solution pour éviter que la queue de messages se vide dans le redirect?

  14. #14
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    le problème c'est que tu utilise une navigation pour rester sur la même page, ce n'est pas très utilie, car, par défaut, s'il n'y a pas d'outcome tu reste sur la même page. Il suffit dans l'action de retourner une valeur null.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut
    Oui je suis d'accord, mon exemple n'est pas tout à fait bon. Mon idée est bien entendu de passer sur une autre page, et d'y afficher les messages générés par la précédente action.

    Cela dit, si ça ne marche pas en restant sur la même page, il n'y a pas de raison que cela fonctionne en passant sur une autre page. D'ailleurs j'ai testé, ça ne fonctionne effectivement pas...

    Mais pourquoi le redirect vide-t-il la queue de messages?

  16. #16
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu utilise les messages de validation pour juste afficher un message que l'action c'est bien passé alors que c'est pas fait pour, après la phase conversion, JSF continue normalement le reste des phases, et dans une dont je ne me souviens plus, la queue des messages est vidée.

Discussions similaires

  1. Problème affichage rich:popupPanel dans un ui:include
    Par amadoulamine1 dans le forum JSF
    Réponses: 0
    Dernier message: 04/08/2011, 13h34
  2. Réponses: 3
    Dernier message: 03/09/2010, 16h36
  3. Réponses: 0
    Dernier message: 03/12/2009, 22h02
  4. problème affichage rich:dataTable
    Par altair_606 dans le forum JSF
    Réponses: 3
    Dernier message: 03/01/2009, 02h40
  5. Problème avec l'affichage de message d'erreur
    Par gaet_045 dans le forum JSF
    Réponses: 2
    Dernier message: 08/05/2007, 11h56

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