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 :

basique formulaire JSF néanmoins une exception


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut basique formulaire JSF néanmoins une exception
    Bonjour,

    Débutant avec le basique formulaire ci bas :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ui:define name="body">
          <h:form id="helloForm">
            <h:inputText   value="#{Dictionary.key}"/>
            <h:inputText   value="#{Person.Name}"/>      
            <h:inputSecret value="#{Person.Pwd}"/>
            <h:commandButton  type="submit" action="success" value="ok"/>                
          </h:form>
        </ui:define>
      </ui:composition>

    j'arrive à produire l'exception suivante :
    Exception while calling encodeEnd on component : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /index.xhtml][Class: javax.faces.component.html.HtmlForm,Id: helloForm][Class: javax.faces.component.html.HtmlInputText,Id: j_id6]}
    Caused by:
    cause
    Si je supprime la ligne rouge (deuxième inputtext) l'exception est levée ?
    Avez vous une explication ?

    Par avance merci.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:inputText value="#{Person.Name}"/>
    le champs est appelé peu être name et doit disposer des getter/setter.

    donc dans la page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:inputText value="#{Person.name}"/>

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut
    Merci pour la réponse.

    J'utilise le bean ci bas qui me semble conforme avec description du composant :

    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
    // Description of managed bean "Person"
    public class Person {
      // Attributes
      private String  Name;
      private String  Pwd;
     
      // Constructor
      public Person() {   
        Name = "toto";
        Pwd  = "titi";  
      }
     
      // Methods
      public String login() {
        if ((Name == null) || (Name.length() == 0))  return "failureLogin";
        if ((Pwd  == null) || (Pwd.length()  == 0))  return "failureLogin"; 
        else                                         return "successLogin";    
      }
     
      // Getters and Setters
      public void setName(String name) {
        this.Name = name;
      }
     
      public void setPwd(String pwd) {
        this.Pwd = pwd;
      }
     
      public String getName(String name) {
        return this.Name;
      }
     
      public String getPwd(String pwd) {
        return this.Pwd;
      }  
    }

  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
    et la définition du bean dans le faces-config ?
    et n'oublie pas de mettre le code entre balises CODE!

    faut savoir que la norme de nommage des bean: les champs commencent toujours par une minuscule.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut
    La déclaration standard du bean est minuscule c'est contraire aux bonnes règles de nommages java il me semble non ? Une classe un attribut ça débute de préférence avec une majuscule non ?

    Sinon la declaration du bean est la suivante, également conforme il me semble :

    <managed-bean>
    <managed-bean-name>Person</managed-bean-name>
    <managed-bean-class>org.sz1708.myfacesExample1.Person</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

  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


    modifie ton bean;

    change Name en name et Pwd en pwd

    et aussi Person en person.
    c'est juste des règles de java beans, mais, peut être, peut être les facelets obligent à les respecter..

  7. #7
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut
    J'ai fais l'essai avec tout en minuscule (fichier java bean, page xhtml et face-config.xml), l'exception est reproduite.

    Visiblement la piste est ailleurs, avec un code encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ui:define name="body">
      <h:form>
        <h:inputText   value="#{person.name}" />      
        <h:inputSecret value="#{person.pwd}"  />                        
      </h:form>
    </ui>

    Je remplace inputText par InputSecret comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <ui:define name="body">
      <h:form>
        <h:inputSecret value="#{person.name}" />      
        <h:inputSecret value="#{person.pwd}"  />                        
      </h:form>
    </ui>
    Et là l'exception n'est plus reproduite ?

  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
    bizard
    tu peux donner la suite de l'exception?

  9. #9
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut
    Voici la trace, la ligne rouge semble en dire un peu plus, elle dit que la propriété name n'est pas readable :

    GRAVE: Error Rendering View[/index.xhtml]
    javax.faces.FacesException: Exception while calling encodeEnd on component : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /index.xhtml][Class: javax.faces.component.html.HtmlForm,Id: j_id4][Class: javax.faces.component.html.HtmlInputText,Id: j_id5]}
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:559)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:250)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:246)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:246)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:578)
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:324)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
    Caused by: javax.faces.FacesException: Could not retrieve value of component with path : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /index.xhtml][Class: javax.faces.component.html.HtmlForm,Id: j_id4][Class: javax.faces.component.html.HtmlInputText,Id: j_id5]}
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getValue(RendererUtils.java:331)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getStringValue(RendererUtils.java:275)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.renderInput(HtmlTextRendererBase.java:142)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.encodeEnd(HtmlTextRendererBase.java:57)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:556)
    ... 27 more
    Caused by: javax.el.PropertyNotFoundException: /index.xhtml @22,47 value="#{person.name}": The class 'org.sz1708.myfacesExample1.person' does not have a readable property 'name'.
    at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:73)
    at javax.faces.component.UIOutput.getValue(UIOutput.java:68)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getValue(RendererUtils.java:327)
    ... 31 more
    Sinon dans le java bean il faut ecrire setName ou setname ? En essayant les deux syntaxes le comportement n'a à première vue pas évolué ?

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private String name;
     
    public String getName(){
     
    }
     
    public void setName(){
     
    }

  11. #11
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut
    Merci.

    Pour l'exception : javax.el.PropertyNotFoundException: /index.xhtml @22,47 value="${person.name}" The class 'org.sz1708.myfacesExample1.person' does not have a readable property 'name'.

    Tu aurais une idée ?

  12. #12
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Peut etre que name est un mot clé utilisé par le EL. Essaye de remplacer name par nom et dit nous si ta toujours la même exception.

  13. #13
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut
    Idem

  14. #14
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    dans ton bean ta bien changer les getters et setters aussi ?

    setNom(String) et getNom()

  15. #15
    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
    Citation Envoyé par Esil2008 Voir le message
    Peut etre que name est un mot clé utilisé par le EL. Essaye de remplacer name par nom et dit nous si ta toujours la même exception.
    non ce n'est pas un mot clé..
    il faut juste déclarer le champs name avec getter/setter
    et l'ajouter dans le faces-config
    si tu utilise Eclipse, ne le fait pas à la main..Click-droit->Source->generate getter/setter..

  16. #16
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut
    Oui.

    J'apporte un peu peu plus de précision sur l'environnement du projet.
    Je n'utilise pas d'IDE (Eclipse, NetBeans), j'utilise maven 2 en ligne de commande et je génère le projet à l'aide d'un archetype fournit par apache pour generer un squelette de projet myface+jsf+facelet .

    L'archetype en question génère l'arborescence de travaille usuelle de maven. J'utilise ensuite l'artifact jetty pour déployer sur serveur jetty, il est apriori par défaut configuré pour être nativement compatible avec l'arborescence usuelle de maven, c'est plug and play.

    Mais bon comme je débute dans java, j2ee et maven j'ai donc pas mal d'incertitude quand à ma configuration.

    Il semble bien que mon bean n'est pas accessible mais ce n'est pas systématique, est ce qu'il n'y aurais pas une incohérence syntaxique dans ma page xhtml. Le fait d'utiliser inputSecret en lieu et place de inputText annule en apparence le problème ?

  17. #17
    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 entonnant que ça marche avec inputSecret et pas avec inputText, tu peux tester un outputText pour voir la valeur de ton champs.
    c'est peu être un problème de compilation ou de déploiement..
    est ce que tu est sur de ce qui déployer sur le serveur.
    l'exception indique que le la property name n'existe pas ou n'a pas de getter.

  18. #18
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut
    idem avec outputText.
    Pour la compilation person.class est bien généré.
    Au niveau déploiement si j'ai compris le plugin jetty va directement chercher les infos dans le projet maven.
    Avec inputSecret le bean n'est pas remis en cause et l'appli démarre...

  19. #19
    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
    J'ai copié le Bean telquel et j'ai créé une page JSP comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <%@ page contentType="text/html"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="html"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="core"%>
    <core:view>
    	<html:form>
    		<html:inputText   value="#{person.Name}"/>      
                   <html:inputSecret value="#{person.Pwd}"/>
    	</html:form>
    </core:view>
    J'ai exécuté et ça marche parfaitement
    Mes articles, Mon Blog

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


  20. #20
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Par défaut
    Sous quel environnement de travail ? Me concernant avec la page ci bas sans template facelet ça échoue :

    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
    !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <HTML xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:c="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html">
          
    <HEAD>  
      <META http-equiv="content-type" content="text/html; charset=utf-8" />
      <META name="generator" content="PSPad editor, www.pspad.com" />
      <TITLE>sz1708 myfacesExample1 title</TITLE>  
    </HEAD>
    
    <BODY>
        <c:view>
          <h:form>
            <h:inputText value="#{person.nom}" />                                      
          </h:form>    
        </c:view>  
    </BODY>
    </HTML>

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. jointure en jpa dans une formulaire jsf
    Par tifawa dans le forum JSF
    Réponses: 10
    Dernier message: 21/06/2012, 17h22
  2. récupérer la valeur de inputText d'une formulaire JSF
    Par clubist dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 22/03/2010, 22h25
  3. Réponses: 1
    Dernier message: 18/12/2009, 20h01
  4. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  5. [CR] Tranfert de formulaire a travers une page HTMl
    Par LIEU dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 12/09/2002, 08h37

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