J'ai une propriété de type Set dans ma bean et je souhaiterai y acceder dans ma page via une balise jsf <inputText> en utilisant EL, quelqu'un a une idée?
Version imprimable
J'ai une propriété de type Set dans ma bean et je souhaiterai y acceder dans ma page via une balise jsf <inputText> en utilisant EL, quelqu'un a une idée?
Un Set est une liste, or un inputText ne peut faire référence qu'à un élément. Difficile de faire le lien entre un Set et un inputText dans ce cas...
Peux-tu expliquer un peu plus en détails ce que tu souhaites faire ?
une classe client avec une propriété contacts
dans ma classe controller j'ai une propriété qui pointe vers la classe clientCode:private Set<Personne> contacts = new HashSet();
Je souhaite insérer un contact au client via page contact dont voici la déclaration.Code:
1
2
3
4
5 @ManagedBean(name = "clientController") @SessionScoped public class ClientController { private Client current; ...
Ceci retourne un message d'erreur parceque l'expression en rouge renvois un Set non un objet de type contact (Personne).Code:
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 <h:form id="form_create_personne"> <h:panelGrid columns="2"> <h:outputLabel value="#{bundle.CreatePersonneLabel_nom}" for="nom" /> <h:inputText styleClass="text" id="nom" value="#{clientController.selected.contacts.nom}" title="#{bundle.CreatePersonneTitle_nom}" /> <h:outputLabel value="#{bundle.CreatePersonneLabel_prenom}" for="prenom" /> <h:inputText styleClass="text" id="prenom" value="#{clientController.selected.contacts.prenom}" title="#{bundle.CreatePersonneTitle_prenom}" /> <h:outputLabel value="#{bundle.CreatePersonneLabel_email}" for="email" /> <h:inputText styleClass="text" id="email" value="#{clientController.selected.contacts.email}" title="#{bundle.CreatePersonneTitle_email}" /> <h:outputLabel value="#{bundle.CreatePersonneLabel_gsm}" for="gsm" /> <h:inputText styleClass="text" id="gsm" value="#{clientController.selected.contacts.gsm}" title="#{bundle.CreatePersonneTitle_gsm}" /> <h:outputLabel value="#{bundle.CreatePersonneLabel_telephone}" for="telephone" /> <h:inputText styleClass="text" id="telephone" value="#{clientController.selected.contacts[0].telephone}" title="#{bundle.CreatePersonneTitle_telephone}" /> <h:outputLabel value="#{bundle.CreatePersonneLabel_fax}" for="fax" /> <h:inputText styleClass="text" id="fax" value="#{clientController.selected.contacts.fax}" title="#{bundle.CreatePersonneTitle_fax}" /> </h:panelGrid> <h:commandLink action="next" value="#{bundle.AddNew}"/><br/> <h:commandLink action="#{clientController.create}" value="#{bundle.CreateClientSaveLink}"/><br/> <h:commandLink action="#{clientController.prepareList}" value="#{bundle.CreateClientShowAllLink}" immediate="true"/><br/> <h:commandLink value="#{bundle.CreateClientIndexLink}" action="/index" immediate="true"/><br/> </h:form>
comment faire pour accéder à l'objet via EL
En fait tu ne peux pas procéder ainsi.
Il te faut créer un contact intermédiaire dans ta classe Personne, genre tmpContact (en fournissant un getter et en pesant à toujours l'initialiser pour éviter les NPE) et ensuite, tu pourras y accéder dans tes ELs:
Code:<h:inputText value="#{clientController.selected.tmpContact.nom}" .../>
Ensuite, dans ton bouton action de création du contact, il te suffira (après validation) d'ajouter le tmpContact dans ta liste de contact :
Code:
1
2
3
4
5 public String create() { ... selected.getContacts().add(selected.getTmpContact()); ... }
C'est bien à quoi je pensais, merci bcp tu me confortes dans ma solution.