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 :
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.
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 } }
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 :
- C'est moche
- 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 !
Partager