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 :

Plusieurs instances d'un même bean ?


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut Plusieurs instances d'un même bean ?
    Bonjour à tous,

    je suis débutant en JSF et je bloque sur la création de plusieurs instances d'un même bean. Je m'explique :

    J'ai une page web avec beaucoup de champs. Tout ces champs se répètent plusieurs dans la page, en fait il y a plusieurs "groupes" de champs, et ils se répètent d'un groupe à l'autre. Si je fais un seul bean j'ai une classe immense avec beaucoup de copier/coller car beaucoup de méthodes se répètent (vérifier un champ par exemple).

    Ce que je pensais faire : un bean générique (correspondant en gros à un groupe de champs) et ensuite je créé une instance de ce bean générique pour chaque "groupe".

    Mon bean générique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @ManagedBean(name="beanGenerique")
    @ViewScoped
    public class BeanGenerique {
     
        @ManagedProperty(value="#{bean1}")
        private SousBean bean1;
        @ManagedProperty(value="#{bean2}")
        private SousBean bean2;
     
        // mes getters
        // mes setters
    }
    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
    @ManagedBean
    @SessionScoped
    public class SousBean {
     
        private String champ1;
     
        // mes getters
        // mes setters
     
        public boolean verif(){    // une methode basique
            if (a != null) {
                return true;
            } else return false;
        }
    }
    Malheureusement cela ne fonctionne pas.

    Merci à tous pour votre aide.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 122
    Par défaut
    Je crois que cen'est pa du tout bon q'un bean soit un proprité d'une autre bean.
    Une solution est (peut-etre) que tes sousBean herite tout simplement ton Generique bean.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class SousBean extends BeanGenerique
    Un autre erreur, ton BeanGenerique est ViewScoped alors que les sousBeans sont SessionScoped. Celà cree un conflit car tes sousBeans sera detruit avec ton BeanGenerique. Peut etre que tu devrait changer le scope de BeanGenerique en SessionScoped.


    Remarque: je n'ai jamais essayé à utiliser deux instances d'un meme bean sur la meme vue.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 122
    Par défaut
    Cependant, il y a un moyen re recuperer les valeur d'un autre bean (qui est encore en vie, donc pa detruit)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SousBean sousBean = (SousBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SousBean");
    Et c'est là aussi que j'ai remarqué que tu as oublié de donné un nom à ton bean SousBean

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    La façon dont tu exposes ton problème, me laisse à penser que ce n'est pas un problème de bean !

    pour moi (mais j'ai peut être pas compris se que tu veux exactement) ta classe sousBean n'est pas un bean mais une classe java classique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class SousBean {
     
        private String champ1;
     
        // mes getters
        // mes setters
     
        public boolean verif(){    // une methode basique
            if (a != null) {
                return true;
            } else return false;
        }
    }
    Et ta classe BeanGenerique utilise la classe SousBean comme n'importe quel classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @ManagedBean(name="beanGenerique")
    @ViewScoped
    public class BeanGenerique {
     
        private SousBean bean1 = new SousBean();
        private SousBean bean2 = new SousBean();
     
        // mes getters
        // mes setters
    }
    Encore une fois je n'ai peut être pas bien saisie ton besoin !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut
    Merci à vous pour vos réponses car je suis bien bloquée :-(

    En fait je me suis mal expliquée.
    Dans ma page, j'ai un formulaire avec des champs à remplir.
    Le comportement de certains d'entre eux est le même. Par exemple, j'ai plusieurs champs "Age". Sur ce champ age je fais une vérification (par exemple vérifier que l'age est inférieur à 20 ans si oui me retourner vrai).
    Vu que mon champ age se répète 4 fois, je ne veux pas faire un bean avec 4 attributs différents et 4 méthodes qui font la même chose. donc voilà comment j'ai procédé:

    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
    @ManagedBean(name="pBean")
    @SessionScoped
    public class pBean {
     
        // Informations communes à toutes les personnes
        ....
     
        @ManagedProperty(value="#{p1}")
        private PersonneBean p1;
        @ManagedProperty(value="#{p2}")
        private PersonneBean p2;
     
        // mes getters
        // mes setters
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @ManagedBean
    @ViewScoped
    public class PersonneBean {
     
        private String age;
        ....
        // mes getters
        // mes setters
     
        public boolean checkAge(){
            if (age <20 ) return true;
            else return false;
        }
    }
    J'ai l'impression que je ne peux pas utiliser la méthode de Alkhan, car si je fais une simple classe java, ma vue n'accédera pas aux différents champs définis dans cette classe?
    En utilisant la méthode de AASProni, cela signifie-t-il qu'il faudrait que je définisse autant de bean Personne que j'ai de personnes dans ma page?

    Merci encore.

  6. #6
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par fabaud Voir le message
    J'ai l'impression que je ne peux pas utiliser la méthode de Alkhan, car si je fais une simple classe java, ma vue n'accédera pas aux différents champs définis dans cette classe?
    et bien si tu pourra accéder aux champs.
    Si par exemple (avec le code que j'avais mis) tu souhaites accéder au champs 1 du sousBean 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:outputText value="#{beanGenerique.bean2.champ1}" />
    il faut bien sur que les getters et setteurs soit correctement définis.

    Citation Envoyé par fabaud Voir le message
    En utilisant la méthode de AASProni, cela signifie-t-il qu'il faudrait que je définisse autant de bean Personne que j'ai de personnes dans ma page?
    Au vu de cette phrase je me demande si tu ne devrais pas avoir plutot un composant de type dataTable afin d'afficher les personnes d'un liste !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Plusieurs instances d'une même BDD
    Par remax_ren dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/02/2008, 09h53
  2. Réponses: 2
    Dernier message: 14/12/2007, 18h03
  3. Ouvrir plusieurs instances d'un même Etat
    Par SansSucre dans le forum IHM
    Réponses: 4
    Dernier message: 06/07/2007, 16h53
  4. Plusieurs instances d'un même objet
    Par speedster dans le forum Hibernate
    Réponses: 1
    Dernier message: 28/12/2006, 11h46
  5. Réponses: 2
    Dernier message: 11/12/2006, 13h15

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