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 :

Injection de dépendance et constructeur


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut Injection de dépendance et constructeur
    Salut à tous,

    J'ai un bean managé A en session. J'ai un bean managé B ayant un attribut du type du bean A :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <managed-bean>
        <managed-bean-name>monBeanA</managed-bean-name>
        <managed-bean-class>com.test.BeanA</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>monBeanB</managed-bean-name>
        <managed-bean-class>com.test.BeanB</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>beanA</property-name>
            <value>#{monBeanA}</value>
        </managed-property>
    </managed-bean>

    A chaque requête, je dois afficher le résultat d'une requête SQL faite dans le bean B. Cette requête a besoin de plusieurs paramètres dont les valeurs sont contenues dans le bean A.

    J'ai d'abord essayé de récupérer les attributs de mon bean A dans le constructeur de mon bean B :
    Code java : 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 BeanB {
        private BeanA beanA;
        private List maListe; //la liste à afficher (celle qui contient les résultats de ma requête SQL
     
        public BeanB() {
            maListe = resultatSQL(beanA.attributA, beanA.attributB);
        }
     
        // le getteur et setteur de beanA et de maListe
     
        private List resultatSQL(param1, param2) {
            // renvoie le résultat de ma requête SQL dans un objet List
        }
    }
    Mais je me fais insulter car l'attribut beanA est null, puisqu'il n'a pas encore été initialisé. Il sera initialisé après l'appel au constructeur de la classe B.

    J'ai contourné le problème en appelant la méthode resultatSQL(), non pas dans le constructeur, mais dans le getteur de l'attribut maListe de la classe BeanB. Mais d'autres problèmes se posent :
    1. C'est moche
    2. Je n'ai pas accès aux attributs de maListe (la taille par exemple) tant que getMaListe() n'est pas appelé (avec #{monBeanB.maListe} dans une JSP)


    Existe-t-il un moyen de forcer l'injection de dépendance avant l'appel du constructeur de la classe BeanB (sans devoir installer un framework type Spring ou Seam ) ? Ou peut-être qu'il s'agit d'un problème de conception ?

    Merci !

  2. #2
    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
    ton bean B est en scope request, il sera créer à chaque requete, c'est bien ce que tu veux faire??
    sinon je trouve que c'est le comportement normal, un bean A qui référence un bean B, le bean B sera instancié après le A.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut
    Merci pour ta réponse Sniper37.

    Oui effectivement c'est ce que je veux puisque le bean B doit récupérer les résultats à chaque requête (requête HTTP, pas requête SQL ).

    Moi aussi je trouve que c'est un comportement normal. Mais je trouve ma solution de contournement pas très propre. Je débute avec JSF et je ne connais pas encore les bonnes pratiques. Peut-être que je m'y prends mal...

    Comment faire pour appeler une méthode d'un bean à chaque requête HTTP ?

  4. #4
    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
    le faire dans l'action de la requete ou dans une actionListener.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut
    1. Que veux tu dire par "dans l'action de la requete" ?
    2. Quand tu dis "dans une actionListener", tu veux parler de la balise <f:actionListener/> ? Ou une classe qui implémente actionListener ? Ou autre chose ?

  6. #6
    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
    comment tu fais pour passer d'une page à l'autre??
    ou de lancer la requete en restant sur la même page,

    action ou actionListener est l'attribut utilisé dans les composants de controle : commandButton, ou autre.

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

Discussions similaires

  1. [EJB3] [JBoss] Injection de dépendance circulaire ?
    Par Claythest dans le forum Java EE
    Réponses: 6
    Dernier message: 04/08/2009, 08h11
  2. [Framework] injection de dépendances par constructeur
    Par skud dans le forum Spring
    Réponses: 6
    Dernier message: 16/05/2008, 14h15
  3. [EJB3] Injection de dépendance et Stateful
    Par newbeewan dans le forum Java EE
    Réponses: 1
    Dernier message: 15/05/2007, 07h33
  4. [Integration] [EasyMock] Injection de dépendance à l'éxécution
    Par frangin2003 dans le forum Spring
    Réponses: 2
    Dernier message: 06/03/2007, 11h06
  5. Spring + TagSupport et injection de dépendance
    Par worldchampion57 dans le forum Spring Web
    Réponses: 2
    Dernier message: 26/02/2007, 09h01

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