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 2.0] Problème d'accès aux propriétés d'un managedBean


Sujet :

JSF Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut [JSF 2.0] Problème d'accès aux propriétés d'un managedBean
    Bonjour, je n'arrive pas accéder aux propriétés de mes managedBean. Voici comment ils sont déclarés:

    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
    <faces-config>
     <managed-bean>
      <managed-bean-name>userBean</managed-bean-name>
      <managed-bean-class>com.jsfcompref.register.UserBean</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
      <managed-property>
       <property-name>firstName</property-name>
       <property-class>java.lang.String</property-class>
       <value/>
      </managed-property>
     </managed-bean>
    </faces-config>
    Mon mangedbean UserBean.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
     
    public class UserBean{
    	String firstName;
     
    	public UserBean() {
    	}
     
    	public String getFirstName() {
    		System.out.println("get first name");
    		return firstName;
    	}
     
    	public void setFirstName(String firstName) {
    		System.out.println("set first name");
    		this.firstName = firstName;
    	}
     
    	public String addConfirmedUser() {
    		System.out.println("Adding new user");
    		return "success";
    	}
     
    }

    Voici comment j'accèdes aux propriétés de mon bean:
    En écriture:
    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
    <%@ page contentType="text/html"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <f:view>
    	<html>
    <head>
    <title>A Simple JavaServer Faces Registration Application</title>
    </head>
    <body>
    	<h:form>
    		<h2>JSF Registration App</h2>
    		<h4>Registration Form</h4>
    		<table>
    			<tr>
    				<td>First Name:</td>
    				<td><h:inputText value="#{userBean.firstName}" required="true"
    						id="fname" /> <h:message for="fname" /></td>
    			</tr>
     
    		</table>
    		<p>
    			<h:commandButton value="Register" action="register" />
    		</p>
    	</h:form>
    </body>
    	</html>
    </f:view>
    En lecture:
    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
    <%@ page contentType="text/html"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <f:view>
      <html>
        <head>
          <title>A Simple JavaServer Faces Registration Application</title>
        </head>
        <body>
          <h:form>
            <h2>
              JSF Registration App
            </h2>
            <h4>
              Registration Confirmation 
            </h4>
            <table>
                <tr>
                  <td>First Name:</td>
                  <td>
                    <h:outputText value="#{userBean.firstName}"/>
                  </td>
                </tr>
            </table>
            <p><h:commandButton value="Edit" action="revise"/>
               <h:commandButton value="Confirm"
                                     action="#{userBean.addConfirmedUser}" />
            </p>     
          </h:form>
        </body>
      </html>
    </f:view>
    Que ce soit dans mon outputText ou mon inputText, j'aperçois toujours :"#{userBean.firstName}". J'ai inséré des system.out.printl dans mes getter et setter. Et ces messages ne sont jamais apparu alors que le message s'affichant lors du clique sur le bouton "confirm" est bien présent.

    Qui peut me dire d'où vient mon problème,

    Cordialement,

    tupac25

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 33
    Par défaut
    il faut que tu ajoute
    la balise <navigation rule > dans le faces Config
    pour votre cas c'est comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <navigation-rule>
            <from-view-id>votre page de lecture</from-view-id>
            <navigation-case>
       <from-outcome>success</from-outcome>
       <to-view-id>votre page ciblé</to-view-id>
      </navigation-case>
      <navigation-case>
     
      </navigation-case>
            </navigation-rule>
    aussi ajoutes l'annotation @ManagedBean(name = "userBean")
    juste avant public class UserBean avec son import: import javax.faces.bean.ManagedBean;

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Tout d'abord merci d'avoir pris le temps de répondre.

    La balise "navigation-rule" est déjà implémenté dans mon fichier de configuration. Je ne l'ai pas indiqué ici car je pense que ce n'est pas pertinent pour ce problème. Ensuite, êtes-vous sur qu'il me faut l'annotation @managedBean vu que celui ci est déjà déclaré dans le fichier de configuration.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 33
    Par défaut
    bon pour moi je fait tous les deux et ça marche bien

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par Linos1003 Voir le message
    bon pour moi je fait tous les deux et ça marche bien
    Nan , c'est l'un ou l'autre, perso je préfère tout centraliser dans le faces-config,l'avantage c'est qu'en visualisant ton fichier de config tu sais tout de suite quels sont tous les managedBeans du projet.
    Pour le souci en question, voila ce que je propose :
    -Dans ton faces-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <faces-config>
     <managed-bean>
      <managed-bean-name>userBean</managed-bean-name>
      <managed-bean-class>com.jsfcompref.register.UserBean</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
     <!--Tu vires en fait la declaration de ton champ de propriété-->
     </managed-bean>
    </faces-config>
    -Dans ta page tu vires l'element body (ouvert et fermé)
    -Pas forcement besoin de mettre une navigation-rule, JSF reste sur la même page s'il ne sait pas où se rendre.

  6. #6
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Par défaut
    pourquoi tu mets <f:view> en dehors de <html> ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Je suis entrain d'apprendre les JSF avec le bouquin: "JavaServer Faces 2.0 The complete reference. Et le code utilisé ci dessus est un extrait de ce que propose le bouquin pour créer une simple appication JSF.

    Je débute donc avec les JSF.

    @anisj1m: Que me proposes tu?

    Pour mon problème, je pense que j'ai un soucis au niveau de l'écriture de mes getters. En effet, je peux accéder aux méthodes auxquelles je fais appelle, comme pour la méthode addConfirmedUser() car j'aperçois le message sur la console.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Par défaut Bonjour
    Pour les managedbean sous jsf 2 plus besoin de toucher au faces-config.
    Il faut juste ajouter les annotations
    @ManagedBean(name="monbean")
    @SessionScoped
    "monbean" étant le nom à utiliser sur les fichiers xhtml.(#{monbean.firstName})
    Dans ton cas ca donnerai ceci:
    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
     
    @ManagedBean(name="monbean")
    @SessionScoped
    public class UserBean{
    	String firstName;
     
    	public UserBean() {
    	}
     
    	public String getFirstName() {
    		System.out.println("get first name");
    		return firstName;
    	}
     
    	public void setFirstName(String firstName) {
    		System.out.println("set first name");
    		this.firstName = firstName;
    	}
     
    	public String addConfirmedUser() {
    		System.out.println("Adding new user");
    		return "success";
    	}
     
    }

  9. #9
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut
    A priori, tout semble ok.

    Une petite question: tu travailles sous quel environnement ?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Je travaille avec la version Helios d'Eclipse et jre6

  11. #11
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut
    et le serveur ?

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    JBoss AS 6

  13. #13
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    Ton environnement ne reconnait pas les expressions langages EL.

    Ça peut être un problème de configuration, ou manque une lib, ou facelets qui déconne. Variable en fonction des versions aussi.

    L'ordre des balises importe aussi pour les f:view uicomposition etc...

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Pourtant JBoss AS 6 est censé supporter JSF 2.0, il devrait donc reconnaitre les EL

  15. #15
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    Bien sur les EL existent depuis des lustres, mais selon ton erreur au départ

    ton écran affiche "#{userBean.firstName}" et pas un message d'erreur type, dans la console, qui dit que userBean n'est pas trouvé ou que firstName n'est pas accessible.

    Ton bean me semble correcte et ton fichier de navigation et déclaration des beans aussi.

    Donc par deduction tes EL ne sont pas traduites. Donc les filtres ne font pas leur boulot.

    Ta page html se nomme comment ? toto.jsf ?

  16. #16
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    Le plus probable c est que ton web.xml est incomplet.

    En faite c est un peu la galère toute la mise en route. Mais ca vaut qd meme le coup.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Voici mon 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
    <?xml version = '1.0' encoding = 'windows-1252'?>
    <web-app 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" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">
        <description>Empty web.xml file for Web Application</description>
        <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>35</session-timeout>
        </session-config>
        <mime-mapping>
            <extension>html</extension>
            <mime-type>text/html</mime-type>
        </mime-mapping>
        <mime-mapping>
            <extension>txt</extension>
            <mime-type>text/plain</mime-type>
        </mime-mapping>
    </web-app>
    Et mes pages ont l'extension .jsp

  18. #18
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Par défaut Bonjour
    puisque tu semble est en phase de prise en main, tes pages xhtml(avec l'extension .xhtml et non .jsf ou .jsp) doivent ressembler à ca
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!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:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:a4j="http://richfaces.org/a4j"
          xmlns:rich="http://richfaces.org/rich">
       <h:head>
       		<title>IGNORED</title>
       </h:head>
        <body>        
       </body>
     </html>
    ton faces-config
    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
     
    <?xml version='1.0' ?>
    <faces-config xmlns="http://java.sun.com/xml/ns/javaee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
     
    	<application>		
    		<resource-bundle>
    			<base-name>messages</base-name>
    			<var>bundle</var>
    		</resource-bundle>
    		<locale-config>
    			<default-locale>en</default-locale>
    			<supported-locale>fr</supported-locale>
    		</locale-config>
    	</application>	
    	<navigation-rule>
       		<navigation-case>
          		<from-outcome>home</from-outcome>
          		<to-view-id>/home.xhtml</to-view-id>
          		<redirect/>       		  
       		</navigation-case>
    	</navigation-rule>
     
    </faces-config>
    La balise <application> si necessaire
    et ton web
    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
    45
    46
    47
    48
    49
    50
    51
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>test</display-name>
     <resource-ref>
          <description>DB Connection</description>
          <res-ref-name>jdbc/mabase</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
      </resource-ref>
     
    <context-param> 
    <param-name>org.richfaces.skin</param-name>
       <param-value>darkX</param-value>
    </context-param>
    <context-param>
          <param-name>org.richfaces.enableControlSkinning</param-name>
          <param-value>false</param-value>
    </context-param>
     
     
     
     
     
    <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
     <param-value>Development</param-value>
    </context-param> 
     
    <context-param>
      <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
      <param-value>client</param-value> 
      </context-param>
    <!-- Faces Servlet -->
    <servlet>
       <servlet-name>Faces Servlet</servlet-name>
       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
       <load-on-startup>1</load-on-startup> 
    </servlet>
     
    <!-- Faces Servlet Mapping -->
    <servlet-mapping>
       <servlet-name>Faces Servlet</servlet-name>
       <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
      <welcome-file-list>
     
        <welcome-file>index.jsp</welcome-file>
     
      </welcome-file-list>
    </web-app>
    le bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <resource-ref>
          <description>DB Connection</description>
          <res-ref-name>jdbc/mabase</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
      </resource-ref>
    si nécessaire et suivant tes besoins et t'as l'option des skins.

  19. #19
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    c est exacte quand on travail avec RichFaces mais dans son cas il fait de JSF standard.

    Cela dit mieux vaut partir tout de suite avec RichFaces

    (je vois pas l erreur)

  20. #20
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Par défaut
    As-tu essayer ce qu'as dit DevServlet :
    <faces-config>
    <managed-bean>
    <managed-bean-name>userBean</managed-bean-name>
    <managed-bean-class>com.jsfcompref.register.UserBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <!--Tu vires en fait la declaration de ton champ de propriété-->
    </managed-bean>
    </faces-config>

Discussions similaires

  1. Problème d'accès aux propriétés d'un beans via El
    Par itachis dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 01/03/2015, 14h21
  2. Problème accès aux propriétés entre deux classes liées par many-to-one
    Par moha1984 dans le forum Persistance des données
    Réponses: 1
    Dernier message: 21/06/2010, 10h07
  3. Problème d'accès aux propriétés d'un EventResult
    Par ToniConti dans le forum Flex
    Réponses: 6
    Dernier message: 13/01/2010, 11h42
  4. [Problème] Accès aux propriétés de listes nommées avec []
    Par VincentL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 16h13
  5. Accès aux propriétés ScrollBar d'un composant TMemo
    Par fausto dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/10/2003, 11h08

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