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 :

passage d'une valeur d'un bean à un autre


Sujet :

JSF Java

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 150
    Par défaut passage d'une valeur d'un bean à un autre
    Bonjour tout le monde;

    supposé que j'ai deux pages JSF avec un bean chacune.

    une fonction d'un bean donne un paramètre comme résultat d'un traitement (requête SQl).

    comment faire passer la valeur de ce paramètre à une fonction du second bean.

    MERCI

    NB: si ce n'est pas clair je suis disponible pour préciser encore plus ma question.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 426
    Par défaut
    Salut, je te propose ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <a4j:commandButton value="valider">
                <a4j:actionparam name="username" value="#{bean1.resultSql}" assignTo="#{bean2.valeur}"/>
            </a4j:commandButton>
    dans le getResultSql(), tu met ton traitement Sql

    J'espère que ça t'aidera

  3. #3
    Membre éclairé Avatar de VirageGroup
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 81
    Par défaut
    Bonjour,

    tu peux aussi retrouver un bean JSF directement en java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    FacesContext facesContext = FacesContext.getCurrentInstance();
     
    //( JSF 1.2 )
    ValueExpression valueExp = getValueExpression("#{" + nomBackingBean + "}");
    if (valueExp != null) {
                backingBean = valueExp.getValue(facesContext.getELContext());
    }
    backingBean.setParametre(...);
    où "nomBackingBean" est le nom du bean recherché tel que défini dans le faces-config.xml.

    Attention, néanmoins à la définition du scope des bean !!

    VG.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 150
    Par défaut
    Merci bien jaljal mais le a4j n'est pas reconnu une fois que je l'insère. Précise un peu plus si possible.

    Merci Viragegroup, je pars sur le champs essayer ce que tu me propose ici.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Par défaut
    tu peux aussi déclarer dans le faces-config une propriété pour le bean1 ayant pour valeur le bean2.

    Exemple:
    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
     
    <managed-bean>
    		<managed-bean-name>bean1</managed-bean-name>
    		<managed-bean-class>monpackage.Bean1</managed-bean-class>
    		<managed-bean-scope>session</managed-bean-scope>
    		<managed-property>
    			<property-name>bean2</property-name>
    			<property-class>package.Bean2</property-class>
    			<value>#{bean2}</value>
    		</managed-property>
    </managed-bean>
    <managed-bean>
    		<managed-bean-name>bean2</managed-bean-name>
    		<managed-bean-class>monpackage.Bean2</managed-bean-class>
    		<managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    Dans ton managed bean bean1 tu auras un attribut de Bean2 avec évidemment les getters/setters associés.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 150
    Par défaut
    l'attribut auquel tu fais allusion doit bien figurer quelque part dans les lignes de faces-config.xml que tu viens de poster.

    Est-ce au niveau de #{bean2} ???? a la place de bean2 ????

  7. #7
    Membre éclairé Avatar de VirageGroup
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 81
    Par défaut
    Bonjour VirageGroup et merci pour tes reponses;

    Comment doit-je déclarer mon backing bean dans ces lignes de codes que tu viens de me poster.

    * mon bean : Menu.java

    * mon backing bean que je veux utiliser : Authentification.java

    * mon package : maquette_statique

    Merci pour tes précisions
    Je suppose que dans ton fichier faces-config.xml tu as qqchose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <managed-bean>
    		<managed-bean-name>MenuBean</managed-bean-name>
    		<managed-bean-class>maquette_statique.Menu</managed-bean-class>
    		<managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
     
    <managed-bean>
    		<managed-bean-name>AuthentificationBean</managed-bean-name>
    		<managed-bean-class>maquette_statique.Authentification</managed-bean-class>
    		<managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    Dans ce cas, tu peux faire dans une méthode de Authentification tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    FacesContext facesContext = FacesContext.getCurrentInstance();
    Menu menu = null; 
    //( JSF 1.2 )
    ValueExpression valueExp = getValueExpression("#{ MenuBean }");
    if (valueExp != null) {
                menu = valueExp.getValue(facesContext.getELContext());
    }
     
     
    menu.setFoo(...);
    menu.getBar();
    VG

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 150
    Par défaut
    aprés avoir fait ces déclarations, menu. ne me donne pas de methode qui commence par set, ni par get. Les deux seuls methodes qui commencent par set et get sont getClass et saveData.

    Merci pour votre patience

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 150
    Par défaut
    Salut VirageGroup si tu as du code qui marche, poste moi les deux beans qui s'utilisent, pour que je puisse faire une analogie.

    Merci

  10. #10
    Membre éclairé Avatar de VirageGroup
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 81
    Par défaut
    Aurais-je oublié un cast ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Menu menu = null; 
    //( JSF 1.2 )
    ValueExpression valueExp = getValueExpression("#{ MenuBean }");
    if (valueExp != null) {
                menu = (Menu)valueExp.getValue(facesContext.getELContext());
    }

  11. #11
    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 as un exemple dans la .
    N'hésite pas à y jeter un coup d'œil.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 150
    Par défaut
    le parse dont tu vient de parler, je l'avait déja fait, néanmoins je te remercie beaucoup VirageGroup pour ton interet, j'ai appris avec toi quelques nouvelles lignes de codes que j'ignorais auparavant.

    Je me met sur la FAQ JSF sur le champ.

  13. #13
    Membre éclairé Avatar de VirageGroup
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 81
    Par défaut
    Je viens de me rendre compte qu'il manque peut-être le détail de la methode getValueExpression() qui peut etre utile:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public ValueExpression getValueExpression(String expr) {
     
            FacesContext context = FacesContext.getCurrentInstance();
            return context.getApplication().getExpressionFactory().
                createValueExpression(context.getELContext(),
                                      expr,
                                      Object.class);
        }
    VG

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 150
    Par défaut
    l'article qui figure dans FAQ JSF et qui traite de passage de propriété de bean vers une page n'a pas tourné dans mon application

    VirageGroup, pourrais tu etre plus clair quant a la fonction que tu m'a envoyé.

    Merci

  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 twister9458 Voir le message
    l'article qui figure dans FAQ JSF et qui traite de passage de propriété de bean vers une page n'a pas tourné dans mon application

    VirageGroup, pourrais tu etre plus clair quant a la fonction que tu m'a envoyé.

    Merci
    tu veux faire quoi au juste?

    passer une valeur à un champs d'un bean en session??

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 150
    Par défaut
    J'ai une page d'authentification avec un bouton valider, celui-ci actionne l'accés à la BD et exécute la requête SQL qui a comme résultat quelques champs de la BD entre autres le nom et le prenom de l'utilisateur.

    Dans la seconde page, j'ai plusieurs champs parmi eux un label. Je veux que ce label puisse afficher le nom et le prenom de l'utilisateur qui ont été reçu à l'aide de la requête.

    De plus sur cette seconde page j'ai une insertion en BD et je dois garder le nom et le prénom de l'utilisateur en session pour pouvoir l'insérer aussi avec les autres données à insérer (comme une trace en quelque sorte).

    Donc je dois faire passer les valeurs des champs du premier bean pour le second bean, mais comment !?

    Aprés si vous jugez que je poste mon code, je le fais , rien que deux petits beans

    MERCI BEAUCOUP

  17. #17
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    A voir tous les messages qui passent par une évaluantion expresison languange, faites attention. Vous hardocdez dans votre code java le nom d'un bean qui normalement devrais être défini lors de la réalisation des pages et non pas lors de la réalisation de la couche code. Si demain les beans doivent être changé de nom, faudra passer partout dans le code chercher des références. Utilisez de préférence l'exemple mentionné plus haut des managed properties, c'est la méthode correcte pour lier des beans entre eux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <managed-bean>
    		<managed-bean-name>bean1</managed-bean-name>
    		<managed-bean-class>monpackage.Bean1</managed-bean-class>
    		<managed-bean-scope>session</managed-bean-scope>
    		<managed-property>
    			<property-name>bean2</property-name>
    			<property-class>package.Bean2</property-class>
    			<value>#{bean2}</value>
    		</managed-property>
    Bien sur, ca suppose que la classe Bean1 ressemble en gros à ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Bean1{
        private Bean2 bean2;
        public Bean2 getBean2(){return bean2;}
        public void setBean2(Bean2 bean2){this.bean2=bean2}
        // tous le code de Bean1  a ainsi accès à Bean2 via "getBean2()"
    }

  18. #18
    Membre éclairé Avatar de VirageGroup
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 81
    Par défaut
    @twister9458
    La methode getValueExpression() citée est la méthode utilisée dans le code en exemple dans le post du 17/07/2009 17h02 dans ce fil du discussion.

    @tchize_
    Plusieurs remarques:
    - Les noms des beans sont déja "hardcodé" dans tes pages JSF et si tu veux modifier un nom il faut déja faire une passe sur tous ces fichiers.
    - C'est sûr qu'il est tout de même plus propre de passé par une constante
    ou même, si on utilise les annotations, de voir s'il est possible de retrouver le nom au runtime.

    VG.

  19. #19
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par VirageGroup Voir le message
    - Les noms des beans sont déja "hardcodé" dans tes pages JSF et si tu veux modifier un nom il faut déja faire une passe sur tous ces fichiers.
    Sauf que les gens qui font les pages web ne sont pas nécessairement ceux qui codent les bean. JSF a été concu pour que le webdesigner puisse s'affranchir de tout codage. On lui file de beans qui marchent, il les utilise. Le point de liaison entre le code et le webdesign se faisant par le faces-config et les EL.
    - C'est sûr qu'il est tout de même plus propre de passé par une constante
    ou même, si on utilise les annotations, de voir s'il est possible de retrouver le nom au runtime.
    Non je suis désolé, le plus simple ca reste un managed property. Ca prend trois ligne, t'as pas à créer au vol des expression language, gérer des exceptions, etc. Et si demain t'as besoin de deux instances différentes de Bean2 dans ton JSF, tu peux directement faire pointer Bean1 sur le correct. Je signale aussi que dans les managed proeprty, tu peux initialiser avec toutes les expressions possible. Ainsi tu peux initialiser un bean request scope avec des paramètres de la requetes, hors formulaire, le nom d'utilisateur ou tout autre information accessible a partir du FacesContext.

    Bon, il y a des cas ou c'est pas possible avec les managed-property. Par exemple un bean de session qui a besoin d'accéder à un bean de request. Mais dans ce dernier cas, je m'interrogerais plus de l'intérêt qu'à le bean de session pour une variable request scope. Doit il y avoir design curieux derrière.

  20. #20
    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 tchize_ Voir le message
    A voir tous les messages qui passent par une évaluantion expresison languange, faites attention. Vous hardocdez dans votre code java le nom d'un bean qui normalement devrais être défini lors de la réalisation des pages et non pas lors de la réalisation de la couche code. Si demain les beans doivent être changé de nom, faudra passer partout dans le code chercher des références. Utilisez de préférence l'exemple mentionné plus haut des managed properties, c'est la méthode correcte pour lier des beans entre eux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <managed-bean>
    		<managed-bean-name>bean1</managed-bean-name>
    		<managed-bean-class>monpackage.Bean1</managed-bean-class>
    		<managed-bean-scope>session</managed-bean-scope>
    		<managed-property>
    			<property-name>bean2</property-name>
    			<property-class>package.Bean2</property-class>
    			<value>#{bean2}</value>
    		</managed-property>
    Bien sur, ca suppose que la classe Bean1 ressemble en gros à ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Bean1{
        private Bean2 bean2;
        public Bean2 getBean2(){return bean2;}
        public void setBean2(Bean2 bean2){this.bean2=bean2}
        // tous le code de Bean1  a ainsi accès à Bean2 via "getBean2()"
    }
    Exact, JSF propose ce principe de l'IOC pour gérer les beans et leurs dépendances. ça serait bête de ne pas en profiter.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/10/2006, 16h01
  2. formater une valeur d'un bean
    Par franc6 dans le forum Struts 1
    Réponses: 1
    Dernier message: 10/07/2006, 16h22
  3. [JSF] Récupération d'une valeur d'un bean
    Par mymyma dans le forum JSF
    Réponses: 1
    Dernier message: 21/06/2006, 10h15
  4. [VB]Passage d'une valeur NULL à un champ de type date?
    Par anikeh dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 01/02/2006, 17h04
  5. [scriplet] affecter une valeur par un bean:write
    Par viena dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 25/11/2004, 16h29

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