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 :

enregistrer dans 2 beans


Sujet :

JSF Java

  1. #1
    Membre éclairé Avatar de psycho_xn
    Inscrit en
    Mars 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 250
    Par défaut appel fonction d'un bean dans un autre
    bonjour, j'ai un formulaire depuis lequel je doit enregistrer mes informations en appelant 2 beans différents. comment procéder du moment que l'appel se fait depuis un commanbutton ??

    merci bcp

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    Ca m'a tout l'air d'un problème de conception ça ... mais bon.
    Comme tu ne peux appeler qu'une seule action (bean1.action) depuis le commandButton, il faut appeler l'autre traitement (bean2.action) depuis bean1.action.
    Dans la FAQ, tu as une QR sur comment récupérer un managed bean depuis un autre, et tu peux aussi utiliser la DI comme décrit dans la FAQ

    Après, c'est du Java/POO, donc

  3. #3
    Membre éclairé Avatar de psycho_xn
    Inscrit en
    Mars 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 250
    Par défaut
    je me suis peut être mal exprimé, je vais essayer de dire la chose autrement;
    prenant un exemple simple. supposant qu'on charche à gérer des restaurants, un client vient et passe une commande.
    mon MCD sera donc sous la forme :
    - Client(n_client, ....)
    - Commande (n_cmd, ...)
    avec pr cardinalités : relation 1-n entre commande et client
    => ce qui nous amène à la BD suivante:
    - Client(n_client, ....)
    - Commande (n_cmd,n_client ...)

    je pense que ma conception est simple, claire et correcte.

    passant à mon problème :
    je voudrais appliquer une requete entre 2 table du genre :
    > select * from commande, client
    where commande.n_client = client.n_client;

    comment gérer cette requête avec les beans, puisque on utilise un bean_client et un bean_commande.


    j'espère avoir été assez clair
    merci bcp pour votre aide

  4. #4
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Ok, j'y vois plus clair maintenant
    Tu fais la confusion entre les managed beans de JSF et les beans persistants d'Hibernate, qui n'ont rien à voir entre eux.

    Bon, pour ta défense, le mot bean est tellement surchargé en Java qu'il ne veut strictement plus rien dire

    Les beans d'Hibernate, Client, Commande, etc., on va les appeler BO, Business Objects, pour lever le doute.

    Bref, dans une application Web Java traditionnelle, on sépare les traitements en couche:
    - Couche DAO : encapsule l'accès aux données. Dans ton cas, elle peut contenir entre autres un objet CommandDao offrant une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Collection<Command> getCommandsByClient(Client client)
    - Couche service : utilise la couche DAO et y ajoute la logique métier : n'accepter uen commande qui si le client n'as pas de dettes, etc.

    - Couche contrôle/présentation : DAns le cas de JSF, ce sont les managed beans. Il font le lien avec l'IHM et invoquent les services en conséquence.

    En aucun cas un managed bean va effectuer une requête SQL/HQL.

    Tu peux t'inspirer de cet article pour avoir une vue d'ensemble de la chose:
    http://djo-mos.developpez.com/tutori.../crud-jsf-jpa/

  5. #5
    Membre éclairé Avatar de psycho_xn
    Inscrit en
    Mars 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 250
    Par défaut appel fonction d'un bean dans un autre
    bonjour,

    j'essais d'appeler une fonction d'un bean dans un autre j'ai donc mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FacesContext fc = FacesContext.getCurrentInstance();
    Commande cmd = (Commande)fc.getExternalContext().getSessionMap().get("Commande_bean");
    à partir de cmd j'arrive à avoir uniquement les getters et les setters des propriétés du bean, mais à aucune de ses méthodes.

    merci bcp

  6. #6
    Membre éclairé Avatar de psycho_xn
    Inscrit en
    Mars 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 250
    Par défaut
    je vous montre mes fichiers de mapping en espérant avoir une solution à mon pb,
    d'essais de récupérer les données de mon bean restaurant_ben dans mon 2ème bean plat_bean.
    les fichier de mapping Restaurant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <class dynamic-insert="false" dynamic-update="false" mutable="true" name="Mapping.Restaurant" optimistic-lock="version" polymorphism="implicit" select-before-update="false" table="restaurant">
        <id name="codeResto" column="code_resto" type="integer">
            <generator class="increment"/>
        </id>
        <property name="libelleResto" type="string" column="libelle_resto" length="30"></property>
    </class>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Restaurant implements java.io.Serializable {
     
        // Fields
     
        private Integer codeResto;
        private String libelleResto;
     
    ......... + les gettres et les setters
    Restaurant bean :
    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
    public class b_Restaurant {
     
        Integer code_resto;
        String lib_resto;
     
        public Integer getCode_resto() {
                return code_resto;
        }
        public void setCode_resto(Integer code_resto) {
                this.code_resto = code_resto;
        }
        public String getLib_resto() {
                return lib_resto;
        }
        public void setLib_resto(String lib_resto) {
                this.lib_resto = lib_resto;
        }
        //---------------------------------------------------------------
        public String ajout(){
     .........
        }
    fichier mapping pour Plats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <class dynamic-insert="false" dynamic-update="false" mutable="true" name="Mapping.Plat" optimistic-lock="version" polymorphism="implicit" select-before-update="false" table="plat">
          <id name="codePlat" type="integer" column ="code_plat" >
                <generator class="increment" />
            </id>
            <property name="libellePlat" type="string" column ="libelle_plat" length="100" />
            <property name="naturePlat" type="string" column="nature_plat" length="50" />
            <property name="prixPlat" type="float" column="prix_plat" precision="9" />
            <many-to-one class="Mapping.Restaurant" column="resto" name="restaurant"/>   
      </class>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Plat implements java.io.Serializable {
     
        // Fields
     
        private Integer codePlat;
        private String libellePlat;
        private Restaurant restaurant;
        private String naturePlat;
        private Float prixPlat;
    ....... + getters et setters
    Plat_bean depuis lequel j'essais d'accéder à mon bean Restaurant :
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    public class b_Plat {
        Set plats;
        Integer code_plat;
        String lib_plat;
        Integer resto_plat;
        String nature_plat;
        float prix_plat;
        Restaurant resto;
    
        public Restaurant getResto() {
            return resto;
        }
    
        public void setResto(Restaurant resto) {
            this.resto = resto;
        }
    
        public Set getPlats() {
            return plats;
        }
    
        public void setPlats(Set plats) {
            this.plats = plats;
        }
    
        public b_Plat() {
        }
    
        public Integer getCode_plat() {
                return code_plat;
        }
        public void setCode_plat(Integer code_plat) {
                this.code_plat = code_plat;
        }
        public String getLib_plat() {
                return lib_plat;
        }
        public void setLib_plat(String lib_plat) {
                this.lib_plat = lib_plat;
        }
        public Integer getResto_plat() {
                return resto_plat;
        }
        public void setResto_plat(Integer resto_plat) {
                this.resto_plat = resto_plat;
        }
        public String getNature_plat() {
                return nature_plat;
        }
        public void setNature_plat(String nature_plat) {
                this.nature_plat = nature_plat;
        }
        public float getPrix_plat() {
                return prix_plat;
        }
        public void setPrix_plat(float prix_plat) {
                this.prix_plat = prix_plat;
        }
    public String fonction(){
            FacesContext fc = FacesContext.getCurrentInstance();
            Restaurant res = (Restaurant)fc.getExternalContext().getSessionMap().get("Restaurant_bean"); 
            
            return "ok";
        }
    et là lorsque je met res. j'accède uniquement à libelle_resto et code_resto, je voudrais avoir aussi accès à ajout.

    j'espère que ça n'a pas été trop long.

    merci bcp

    Edit romaintaz: La balise CODE, c'est mieux que QUOTE ici

  7. #7
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Une question : res fait référence à un objet de quel type ? Restaurant ou b_restaurant ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  8. #8
    Membre éclairé Avatar de psycho_xn
    Inscrit en
    Mars 2007
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 250
    Par défaut
    vous aviez raison je devais faire référence à b_Restaurant.

    merci bcp bcp je galère avec depuis 3 jours.

    merci bcp

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

Discussions similaires

  1. copie d'un enregistrement dans une deuxième table
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 5
    Dernier message: 03/03/2004, 12h51
  2. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 00h59
  3. Insertion enregistrement dans table
    Par naidinp dans le forum ASP
    Réponses: 13
    Dernier message: 11/09/2003, 09h56
  4. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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