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: Can't set managed bean property: 'Nom'.


Sujet :

JSF Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Chargé d’études
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d’études

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut JSF: Can't set managed bean property: 'Nom'.
    Bonjour,
    Voilà, parce que j'ai des problèmes sur un projet plus gros, j'ai décidé de reprendre les choses à la base!
    Je développe avec NetBeans et JSF1.1.
    J'ai créé un beans tout simple:
    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
     
    public class User {
        private String Nom;
        private String Prenom;
        /** Creates a new instance of User */
        public User() {
        }
     
        public String getNom() {
            return Nom;
        }
     
        public void setNom(String Nom) {
            this.Nom = Nom;
        }
     
        public String getPrenom() {
            return Prenom;
        }
     
        public void setPrenom(String Prenom) {
            this.Prenom = Prenom;
        }
     
    }
    Ensuite j'ai créé une page toute simple:

    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
     
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
     
    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
        <f:view>
            <h:form id="formonglet">
                Nom : <h:inputText id="Nom" value="#{User.Nom}" />
                </br>
                Prenom : <h:inputText id="Prenom" value="#{User.Prenom}" />
     
            </h:form>
        </f:view>
        </body>
    </html>
    Ensuite pour que le beans soit managé j'ai été dans Faces-Config.xml
    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
     
    <?xml version='1.0' encoding='UTF-8'?>
     
     
    <!DOCTYPE faces-config PUBLIC
      "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
      "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
     
    <!-- =========== FULL CONFIGURATION FILE ================================== -->
     
    <faces-config>
        <managed-bean>
            <managed-bean-name>User</managed-bean-name>
            <managed-bean-class>User</managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
            <managed-property>
                <property-name>Nom</property-name>
                <property-class>java.lang.String</property-class>
                <value>aa</value>
            </managed-property>
            <managed-property>
                <property-name>Prenom</property-name>
                <property-class>java.lang.String</property-class>
                <value>a</value>
            </managed-property>
        </managed-bean>
     
    </faces-config>
    Temps que j'y suis je fournis également web.xml:

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <context-param>
            <param-name>com.sun.faces.verifyObjects</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>com.sun.faces.validateXml</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>javax.faces.CONFIG_FILES</param-name>
            <param-value>/WEB-INF/faces-config.xml</param-value>
        </context-param>
        <context-param>
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
            <param-value>client</param-value>
        </context-param>
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
            </servlet>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>
        <session-config>
       <session-timeout>
                30
            </session-timeout>
    </session-config>
    <welcome-file-list><welcome-file>
                index.jsp
            </welcome-file></welcome-file-list></web-app>

    Voilà, mon problème est que j' ai l'erreur suivante et que je ne sais pas pourquoi :

    javax.faces.FacesException: Can't set managed bean property: 'Nom'.

    J'ai les getters et setters publics. Il y a quelque chose que je n'ai pas vu ?

    Merci de votre aide

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    tu ne respectes pas tellement les conventions java en majusculisant le nom de tes variables

    le pb peut peut etre venir de la

    renome Nom en nom

  3. #3
    Nouveau membre du Club
    Profil pro
    Chargé d’études
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d’études

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut C'est ça!
    Merci Alexandre.
    ça marche !!!!
    Je n'aurai jamais imaginé que ça pouvait venir de là puisque tout était cohérent.

    encore mille mercis !

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Pour trouver les accesseurs (les méthodes permettant l'accès en lecture ou en écriture) correspondant à la propriété "nom" décrite dans le fichier faces-config.xml, Java met la première lettre de la propriété en majuscule et ajoute "get" (lecture), "set" (écriture) ou "is" (lecture d'une valeur booléenne) devant.

    Les accesseurs getNom() et setNom() correspondent donc à la propriété nom. Une propriété Nom ne peut pas correspondre à des accesseurs.

    Par convention, en Java, tous les identificateurs commencent par une minuscules sauf les nom de classes. (On utilise toutefois souvent des identificateurs entièrement en majuscules pour des pseudo constantes)

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 205
    Points : 0
    Points
    0
    Par défaut
    Salut, ben moi ca faisait un petit bout de temps que j'avais ce problème "property not found" et j'ai failli m'arracher les cheuveux !

    Mais j'avais trouvé la solution, justement en changeant ma Première lettre majuscule par une minuscule dans la view JSF XHTML ...

    En fait en général j'utilise des "minuscules" pour déclarer mes attributs dans une classe, mais comme je l'avais généré depuis une BD existante, ben j'avais des attributs du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private long id;                    //passait via JSF
    private String BLABLA;          //passait via JSF, surement pour les raisons que
                                            //volgadif dit au sujet des pseudos Constantes 
    private String PitchMachin;    //ca ca passait pas ! 1ère lettre majuscule
    private String test1;             //passait bien via JSF, format classique ...
    private String testTruc;        //ca aussi ca passait, format classique aussi...
    Pour que ces variables passent, soit on change dans la classe, en mettant toutes les premières lettres d'attributs minuscules ...

    Soit en mettant en JSF : MyEntity étant le manage bean dans faces-config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #{MyEntity.id}
    #{MyEntity.BLABLA}
    #{MyEntity.pitchMachin} //donc ici j'ai remplacé la première lettre par une 
                                      // minuscule et laissé "private String PitchMachin;" 
                                      // dans la classe, ca parait illogique mais bon ....
    #{MyEntity.testTruc}
    En fait à mon avis, je suppose que le problème réside dans l'implémentation de JSF, le problème c'est que au lieu de checker si la 1ère lettre est en majuscule ou minuscule, il prends la 1ère lettre et l'intervertit.
    C'est à dire que si j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private String PitchHandler;
     
    //le getter ou setter correspondant sera :
    public String getpitchHandler(){...}
    Il a donc intervertit la première lettre alors qu'il aurait du checker si (1ère lettre est majuscule) Alors (Garder Majuscule pour le getter)

    Ce qu'il fait c'est il prends la première lettre, et si elle est en uppercase, il la passe en lowercase dans le getter, et si la première lettre est en lowercase il la passe en uppercase dans le setter...

    Quoi qu'il arrive je trouve que c'est un bug d'implémentation considérable surtout au niveau portabilité ...

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

Discussions similaires

  1. Weblogic 10.0 : injection d'EJB dans managed bean JSF
    Par loic38_01 dans le forum Weblogic
    Réponses: 1
    Dernier message: 05/09/2008, 14h46
  2. JSF propriété d'un managed bean
    Par JAMINF dans le forum JSF
    Réponses: 6
    Dernier message: 11/07/2008, 17h49
  3. Réponses: 4
    Dernier message: 08/07/2008, 23h39
  4. Error testing property 'nom' in bean of type null
    Par khaoula_14_05 dans le forum JSF
    Réponses: 4
    Dernier message: 31/03/2008, 15h37
  5. Réponses: 4
    Dernier message: 10/03/2006, 18h25

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