Bonjour,
je suis débutant en seam mais je connais toute sa puissance. Je taff sur un projet actuellement et j'ai voulu le passer en Seam. Pour simplifier mon probleme j'ai coder des classes simples. Donc mon probleme justement est que quand j'utilise l'annotation @In pour injecter un composant dans un autre, la valeur de ma propriété injectée est tout le temps nulle ! Voici le code correspondant
Un formulaire tres simple
Avec le bean UserBean associé
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 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j" template="layout/template.xhtml"> <ui:define name="titre"></ui:define> <ui:define name="body"> <rich:panel> <f:facet name="header"> <h:outputText value="Creer / Editer un article" /> </f:facet> <h:form> <h:panelGrid columns="2"> <h:outputText value="Nom" /> <h:inputText value="#{UserBean.user.nom}" /> <h:outputText value="Prenom" /> <h:inputText value="#{UserBean.user.prenom}" /> <h:commandButton action="#{UserBean.saveUser}" value="Valider" /> </h:panelGrid> <s:link value="Test" view="/userEdit.xhtml" action="#{Article.test}"/> </h:form> </rich:panel> </ui:define> </ui:composition>
Puis dans un second bean j'injecte le premier afin de récupérer la valeur du User crée
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 @org.jboss.seam.annotations.Name("UserBean") @org.jboss.seam.annotations.Scope(org.jboss.seam.ScopeType.SESSION) public class UserBean { private User user = new User(); public User getUser() { return user; } public void setUser(User user) { this.user = user; } public void saveUser() { System.out.println("nom " + user.getNom()); System.out.println("prenom " + user.getPrenom()); } }
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 import org.jboss.seam.annotations.In; @org.jboss.seam.annotations.Name("Article") @org.jboss.seam.annotations.Scope(org.jboss.seam.ScopeType.SESSION) public class Article { @In(create=true, required=false, value="userBean") private com.eip.funeco.managedbean.UserBean userBean; public void test() { if (null != userBean) { System.out.println("nom " + userBean.getUser().getNom()); System.out.println("prenom " + userBean.getUser().getPrenom()); } else { System.out.println("mon userBean est null"); } } }
Et donc sur la sortie quand je click sur le bouton Valider j'obtiens
nom Durand
prenom Henry
Jusque la ca va, puis quand je click sur le lien Test, il va dans la méthode test(), fait appel au UserBean injecté mais me renvoi sur la sortie :
mon userBean est null
Quoique je fasse il est tjrs null! Si j'enleve le required=false il me mets une erreur : @In attribute requires non-null value: Article.userBean"
Voila désolé pour la longueur du post mais je voulais etre assez clair.
Merci d'avance pour toutes vos solutions
Partager