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 & RichFaces] Affichage de FacesMessage avec <h:message> lors de la validation


Sujet :

JSF Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut [JSF & RichFaces] Affichage de FacesMessage avec <h:message> lors de la validation
    Bonjour,
    Je dois faire pour un projet un formulaire de validation qui réagit lorsque l'on saisit les informations. J'ai donc choisi le RichFaces pour l'ajax.

    Cependant, je n'arrive pas à afficher sur ma page les messages que je créé en cas d'erreur.
    Voici le code jsf "test.jsf" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <h:form>
    	<h:outputText value="Nom : " />
    	<h:inputText value="#{test.lastName}" id="lastname" required="true">
    		<a4j:support event="onkeyup" action="#{test.checkLastName}" reRender="pouet" />
    	</h:inputText>
    	<a4j:outputPanel ajaxRendered="true">
    		<h:message id="pouet" for="lastname" />
    	</a4j:outputPanel>
    </h:form>
    Et voici mon bean "test.jsf" qui est bien déclaré dans mon faces.conf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class test {
    	private String lastName="";
     
    	public String getLastName() {
    		return lastName;
    	}
    	public void setLastName(String lastName) {
    		this.lastName = lastName;
    	}
     
    	public void checkLastName(){
    		FacesContext fc = FacesContext.getCurrentInstance();
    		fc.addMessage("lastname", new FacesMessage("Error LastName"));
    	}
    Cet exemple est bête je veux juste afficher un message lorsque je saisi quelque chose dans le inputText.
    Ce code me permet de générer l'erreur, mais pas de l'afficher dans ma page HTML. Dans les logs du serveur j'ai cela qui est assez explicite mais qui ne m'aide pas à corriger mon erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sourceId=lastname[severity=(INFO 0), summary=(Error Lastname), detail=()];|WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
    sourceId=lastname[severity=(INFO 0), summary=(Error Lastname), detail=()]|#]
    Je sais que ce sujet a déja été traité dans le forum, mais je n'ai pas réussi à corriger mon probleme avec les post parlant de ce sujet.

    Merci de votre aide...

    PS : Lorsque je laisse le champ vide, le message d'erreur s'affiche correctement.

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    salut!

    tu dois utiliser client id au lieu de l'id coté serveur pour afficher tes messages

    tu dois remplacer l'id lastname par client id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fc.addMessage("lastname", new FacesMessage("Error LastName"));

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut
    Bonsoir
    Je ne suis pas sur d'avoir compris....
    J'ai remplace mon code java par "client-id" tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fc.addMessage("client-id",new FacesMessage("Error Lastname"));
    Mais les message s'affichent toujours dans la console d'Eclipse.
    Le "client-id" doit correspondre à quelque chose dans ma page jsp ???

    Désolé d'etre un boulet mais j'ai très peu d'expérience avec le jsp et richfaces...

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    Salut

    peut j ai pas bien expliqué car j'étais un peu pressé.

    j'explique:

    JSF au moment de la génération du l'html correspondant à ta page JSP, génére un client id(un identifiant coté client) pour que chaque composant de ta page soit unique, pour ton cas "lastname" c juste l'id coté serveur, mais si tu visualiseras le code source de ta page générée tu vas trouver un autre id.

    Solution:
    Tu peux faire un bindig de ton composant avec une proprieté dans ton managedBean et tu remplace ton code par celui:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fc.addMessage(nomdelavariable.getClientId(), new FacesMessage("Error LastName"));
    n'hésite pas si tu as besoin de plus explication

    Merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut
    C'est à moi de te remercier....
    Avec un ton aide et quelques recherches google j'ai réussi à obtenir le résultat que je désire...

    Merci beaucoup à toi


    Citation Envoyé par lion.maroc Voir le message
    Salut

    peut j ai pas bien expliqué car j'étais un peu pressé.

    j'explique:

    JSF au moment de la génération du l'html correspondant à ta page JSP, génére un client id(un identifiant coté client) pour que chaque composant de ta page soit unique, pour ton cas "lastname" c juste l'id coté serveur, mais si tu visualiseras le code source de ta page générée tu vas trouver un autre id.

    Solution:
    Tu peux faire un bindig de ton composant avec une proprieté dans ton managedBean et tu remplace ton code par celui:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fc.addMessage(nomdelavariable.getClientId(), new FacesMessage("Error LastName"));
    n'hésite pas si tu as besoin de plus explication

    Merci

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    Salut,

    genial merci a dieu,

    Peux tu ajouter Resolu a votre discussion

  7. #7
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Par défaut
    n'oublie pas de nous montrer comment t'as fais finalement pour résoudre le problème!
    m'ci
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut
    Vi effectivement, si ca peut aider les gens....

    Alors j'ai modifié mon bean pour insérer le component et mon test lorsqu'une touche est pressée. Ainsi mon code Java ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class test {
    	private String lastName;
    	private UIInput fieldLastName;
     
    	/* Getters et setters qu'il faut rajouter */
     
    	public void checkLastName() {
    		if ( ! lastName.matches("[A-Za-z-éèàêç]+")) {
    			FacesContext fc = FacesContext.getCurrentInstance();
    			fc.addMessage(fieldLastName.getClientId(fc), new FacesMessage("Le 'Nom' ne doit contenir que des caractères"));
    		}
    	}
    }
    J'ai modifié ma page jsp pour créer une <a4j:region> pour chaque champ <h:inputText>. Il est important de noter l'attribut "renderRegionOnly" qiu permet de mettre à jour seulement ce champ. Ainsi en pratique mon fichier JSF ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <h:outputLabel for="lastname" value="Nom : " />
    <a4j:region renderRegionOnly="true">
    	<h:inputText value="#{test.lastName}" binding="#{test.fieldLastName}" required="true" id="lastname">
    		<a4j:support event="onkeyup" action="#{test.checkLastName}" reRender="lastNameError" />
    	</h:inputText>
    	<a4j:outputPanel ajaxRendered="true" layout="inline">
    		<h:message for="lastname" id="lastNameError" styleClass="errorMessage" />
    	</a4j:outputPanel>
    </a4j:region>
    Et voila !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 28
    Par défaut
    Bonjour,

    j'ai fait a peu pres la même chose que toi mais j'ai une erreur :

    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
    41
    42
    43
    44
     
    xception during request processing:
    Caused by javax.servlet.ServletException with message: "/test.xhtml @100,167 binding="#{accountRegister.fieldEmail}": Error writing 'fieldEmail' on type org.javassist.tmp.java.lang.Object_$$_javassist_0"
     
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
    org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:42)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:44)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
    org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
    org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
    org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
    org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
    org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:437)
    org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:366)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
    java.lang.Thread.run(Thread.java:595)
    Savez vous d'ou cela peut il venir?

    Sinon a quoi sert exactement de rajouter ton a4j:region ?
    N'y a t'il pas une autre solution que de binder tous les composants dans mon bean ?


    Merci

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    Salut drim

    On doit d'abord connaitre la bibliotheque de composants jsf tu utilises.

    Car le type de la proprieté dans ton managedbean que tu veux lier à ton composant dans ta page JSP depend du type de composant.

    Merci.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 28
    Par défaut
    D'abord, merci de ta réponse. J'utilise RichFaces avec Ajax4Jsf.

  12. #12
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    Salut

    peux tu nous montrer ta page jsp et ton managedBean

    Merci.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 28
    Par défaut
    J'ai crée un autre post pour continuer la discussion : http://www.developpez.net/forums/sho...d.php?t=457498

    Merci de ton aide

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

Discussions similaires

  1. Problème d'affichage de texte avec JSF
    Par fab76000 dans le forum JSF
    Réponses: 5
    Dernier message: 19/05/2012, 19h21
  2. Réponses: 1
    Dernier message: 06/07/2009, 16h38
  3. affichage page Css avec JSF
    Par prog_deb dans le forum JSF
    Réponses: 7
    Dernier message: 03/05/2009, 15h43
  4. Développement RIA avec JSF et Richfaces
    Par Sniper37 dans le forum JSF
    Réponses: 0
    Dernier message: 30/12/2008, 12h19

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