IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Récupérer un ID dans un composant de formulaire


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Novembre 2011
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 89
    Par défaut Récupérer un ID dans un composant de formulaire
    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 :
    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>
    J'affiche une liste d'users avec un champ de saisie afin de trouver plus rapidement l'utilisateur recherché.

    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.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Par défaut
    Bonjour,

    je connais mal OpenFaces et ses possibilités, alors je vais répondre à côté... mais je pense que le principe est similaire et pourra se réutiliser dans ton converter si tu tiens à appliquer cette méthode:

    Jette un oeil du côté des SelectItem .
    Tu peux les initier avec une paire (label,valeur) où tu peux parfaitement glisser tes (user.Nom+user.Prénom,user.id).
    Tu fournis à "selectOne" une List<SelectItem> , et tu lies ta valeur à un paramètre du même type que ton id. De cette façon, l'utilisateur choisit sur la base du label, mais c'est bien l'id qui est founi à ton bean.

    En espérant que ça t'aidera..

  3. #3
    Membre actif
    Inscrit en
    Novembre 2011
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 89
    Par défaut
    Bonsoir,

    merci pour cette réponse, c'est celle que j'ai appliqué (mot pour mot) dans la matiné après avoir passé un peu de temps à chercher et comprendre car cela me semblait pas logique de ne pas pouvoir le faire.

    Donc en effet, il suffit pour cela que la methode coté controlleur getlistdetruc retourne un List<SelectItem>.

    on "créé" un SelectItemen fournissant 2 paramètres : l'objet en lui même et un libellé.
    exemple :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    new SelectItem(user, user.getLastName() + " " + user.getFirstName());

    Ensuite, pour récuperer proprement l'id/l'objet, il faut modifier le convertisseur.
    la methode getAsString doit retourner l'id en chaine (toString())
    et getAsObject doit, après vérification que la chaine de caractères recue n'est pas nulle ou vide, pouvoir après un cast ou parse, récuperer l'id.

    "Aussi simple que cela" ai-je envie de dire, encore fallait-il le savoir.

    En espérant avoir ajouté assez de commentaire pour que ce topic puisse servir à d'autres, encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/12/2009, 19h52
  2. Réponses: 5
    Dernier message: 30/05/2007, 15h04
  3. Réponses: 2
    Dernier message: 22/05/2007, 16h15
  4. Réponses: 4
    Dernier message: 02/05/2007, 10h22
  5. [VBA-E]Formulaire word, récupérer les données dans excel
    Par sablier dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 30/05/2006, 07h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo