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 !