Bonjour,
je suis depuis (trop) peu dans le développement jsf (et plus particulièrement avec openfaces).
Je n'ai pas compris le fonctionnement d'un chose pourtant si simple en html.
Dans ce dernier langage, une liste deroulante se fait du style :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <select name="personne"> <option value="1">Jean bon</option> <option value="2">Sarah Tatouille</option> </select>
Cote serveur, on peut recuperer (avec Php par exemple) la valeur de personne qui sera le "value" selectionné.
En JSF, j'ai beaucoup plus de mal à utiliser cela.
Je n'ai pas d'autres choix que de me former sur le tas et il me semble evident que j'ai manqué quelque chose.
j'ai un objet (bean) USER avec un Nom, prenom et Id. avec getters et setters necessaires.
J'ai une methode coté controlleur qui me retourne une Liste d'users (List<User>) qui sont stockés dans une BDD.
j'ai aussi un convertisseur que voici :
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
15
16
17
18
19
20
21
22
23 public class UserConverter implements javax.faces.convert.Converter { @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { User user = new User(); user.setName(value); return user; } @Override public String getAsString(FacesContext context, UIComponent component, Object value) { String result; if (value == null) { result = ""; } else { result = ((User) value).getFirstName() + " " + ((User) value).getLastName(); } return result; } }
Comme vous le voyez, le convertisseur de contente de renvoyer une concatenation du Nom prenom en chaine ou de créer un user à partir de la chaine.
Déjà, je peux dire qu'ici, dans getAsObject(..) la valeur texte recue est ma version concatenée du nom et prenom.
Coté xhtml :
J'affiche une liste d'users avec un champ de saisie afin de trouver plus rapidement l'utilisateur recherché.
Code xhtml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <o:selectOneMenu style="width:140px" id="select_criteria_closedby" customValueAllowed="false" autoComplete="true" value="#{monModel.marecherche.personne}" converter="#{monController.userConverter}" suggestionMode="custom" var="user"> <o:dropDownItems id="dropDownItemsSelect_criteria_closedby" value="#{monController.listUser}" /> <o:column> <h:outputText value="#{user.firstName} #{user.lastName}" /> </o:column> </o:selectOneMenu>
Vous entrevoyez peut etre mon souci, je désirerais, comme en html basique avec un langage coté serveur, récupérer l'id sélectionné, hors pour l'instant, je ne récupere que la valeur "value" de column. Soit ma concaténation de chaine. Je désire "afficher" à l'utilisateur de l'application, la concaténation nom prénom, mais je cherche bien entendu à récupérer l'id de l'objet sélectionné.
mes doutes sont sur le convertisseur trop leger d'un coté peut etre, mais aussi et surtout coté xhtml, ou il n'est jamais question d'utiliser l'id de mon objet.
merci pour tout information que vous pourrez me donner.
Bonne journée.
Partager