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 :

lien entre rich:comboBox et des objets


Sujet :

JSF Java

  1. #1
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut lien entre rich:comboBox et des objets
    Bonjour, j'ai un formulaire d'ajout d'objets à un tableau, et certains des attributs de ces objets me posent quelques problèmes.

    - des éléments, faisants partie d'une liste précise, que je veux faire choisir via une rich:comboBox et leur méthode toString(). Il faudrait que le choix d'une ligne de la comboBox affecte à une variable l'élément correspondant, j'ai essayé avec value, mais apparement il essayait du coup d'affecter la String directement et non l'objet de la liste correspondant. (donc conversion error )

    - des éléments d'une enum, de même, dans une combo box, il faudrait que que le choix mette dans une variable l'élément correspondant de l'enum. (Alors là je ne sais même pas comment remplir les suggestions avec les éléments de l'énumération java )

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu peux utiliser un converter.

  3. #3
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    Oui c'est ce que je me suis dit (au moins pour le premier problème, pour le remplissage avec l'enum je vois moins bien)

    mais je ne sais pas du tout comment marchent les converter :p Il y aurait de la doc là dessus ?

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par argonath Voir le message
    Oui c'est ce que je me suis dit (au moins pour le premier problème, pour le remplissage avec l'enum je vois moins bien)

    mais je ne sais pas du tout comment marchent les converter :p Il y aurait de la doc là dessus ?
    ouii la

    Pour les enums, je ne pense pas que ce soit possible, tu peux utiliser soit une liste de String soit des selectItems.

  5. #5
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    Bon je regardais le getAsObject, mais j'ai un problème il faut que je compare la valeur d'entrée avec le résultat de toString pour chaque élément de la liste j'imagine...

    mais comment récupérer ma liste ? (qui est un attribut d'un bean de portée application )

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par argonath Voir le message
    Bon je regardais le getAsObject, mais j'ai un problème il faut que je compare la valeur d'entrée avec le résultat de toString pour chaque élément de la liste j'imagine...

    mais comment récupérer ma liste ? (qui est un attribut d'un bean de portée application )
    tu peux utiliser selectItem, pour le converter il faut redefinir getAsObject et getAsString,
    et pour mieux comprendre comment fonctionne la comboBox, jette un coup d'œil sur la documentation.

  7. #7
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    quand je parlais de récupérer ma liste c'était dans le code du converter ^^ je sais déjà comment mettre les éléments de la liste dans le combobox quand même j'ai lu la doc :p ^^

    sinon oui j'avais déjà redéfini le getAsString, mon problème maintenant c'est juste de pouvoir avoir ma liste pour le getAsObject

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par argonath Voir le message
    quand je parlais de récupérer ma liste c'était dans le code du converter ^^ je sais déjà comment mettre les éléments de la liste dans le combobox quand même j'ai lu la doc :p ^^

    sinon oui j'avais déjà redéfini le getAsString, mon problème maintenant c'est juste de pouvoir avoir ma liste pour le getAsObject

    pourquoi une liste?? tu dois définir comment retrouver ton objet à partir d'un String et comment trouver le String qui définit ton objet, tu peux faire une requete en base pour retrouver l'objet ou appeler une fonction de la partie métier ou service, tout dépend de ton model.

  9. #9
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    Bon c'était résolu, ca a très bien marché pour celui-ci

    par contre pour le suivant que j'ai fait et dont voici le code (totalement identique au précédent )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <rich:comboBox selectFirstOnUpdate="false"
    	defaultLabel="Ajout d'acteur"
    	suggestionValues="#{contexteApp.listeActeurs}"
    	value="#{temp.acteurCourant}">
    	<f:converter converterId="acteurConverter" />
    </rich:comboBox>
    quand on choisit un élément de la liste ce n'est pas la valeur de acteurCourant (initialement vide ) qui est mise à jour mais l'élément correspondant de la liste passée en suggestionValues (au moins le converter marche xd ) se vide (prend en fait après vérification la valeur de acteurCourant).

  10. #10
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    utilise seletItems au lieu suggestionValues

  11. #11
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    oui c'est ce que j'ai pensé, mais apparement si je met selectItem mon converter ne marche plus car il prend l'ensemble de l'objet liste en même temps et non élément par élément.

    du coup j'ai le message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.IllegalArgumentException: Cannot convert Bardot Brigitte, Piccoli Michel, Palance Jack of type class metier.ListePersonne to class javax.faces.model.SelectItem
    et " Bardot Brigitte, Piccoli Michel, Palance Jack " c'est ma liste (enfin son "toString" pour les besoins du message d'erreur j'ai l'impression )

    Ou peut être que justement il passe par le converter, il récupère la String " Bardot Brigitte, Piccoli Michel, Palance Jack " mais alors il devrait me mettre ca dans une seule ligne de la comboBox au lieu de ce message d'erreur

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu peux montrer le code des selectItems? ou de la liste listeActeurs

  13. #13
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    le code des selectItems ? des converters tu veux dire j'imagine.

    enfin voilà tout ce qui pourrait servir :

    1. converters
    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
     
    public class PersonneConverter implements Converter {
     
    	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
    		return null;
    	}
     
    	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
    		return arg2.toString();
    	}
    }
     
    public class RealisateurConverter extends PersonneConverter implements Converter {
     
    	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
    		return metier.ContexteApplication.getAsRealisateur(arg2);
    	}
    }
     
    public class ActeurConverter extends PersonneConverter implements Converter {
     
    	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
    		return metier.ContexteApplication.getAsActeur(arg2);
    	}
     
    }

    2.la classe de listeActeurs

    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
    public class ListePersonne extends LinkedList<Personne> implements List<Personne> {
     
    	private static final long serialVersionUID = 1L;
     
    	public ListePersonne() {
    		super();
    	}
     
    	public ListePersonne(Collection<? extends Personne> c) {
    		super(c);
    	}
     
    	public String toString()
    	{
    		if(this.isEmpty())
    			return "";
    		else
    		{
    			String s=new String();
     
    			for (int i=1;i<this.size();i++)
    			{
    				s=s+this.get(i-1).toString()+", ";
    			}
     
    			s=s+this.getLast().toString();
     
    			return s;
    		}
    	}
     
    }

  14. #14
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    non le converter je suppose que tu l'a bien testé, je parle des valeurs que tu passes à la liste de la comboBox.

  15. #15
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    bon je viens de me rendre compte que quand j'ai voulu récupérer le message d'erreur j'avais oublié le s de selectItems. Ca m'étonnait aussi...

    Bon en fait j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.servlet.ServletException: metier.Acteur cannot be cast to javax.faces.model.SelectItem
    alors le code de la balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <rich:comboBox selectFirstOnUpdate="false"
    	defaultLabel="Ajout d'acteur"
    	value="#{temp.acteurCourant}">
    	<f:selectItems value="#{contexteApp.listeActeurs}"/>
    	<f:converter converterId="acteurConverter" />
    </rich:comboBox>
    et la liste listeActeurs correspond à la classe ListePersonne que j'ai mise plus haut. ( Elle est composée d'objets Acteur héritant de Personne qui en recoivent un toString ).

  16. #16
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    le message est bien clair, on ne passe pas une ilste d'objets à selectItems, ça prend une liste de SelectItem,.
    tu trouvera dans la et dans les tutoriels JSF, les principes de base et le fonctionnement de JSF, c'est important de les comprendre avant de se lancer dans le développement.

  17. #17
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    Ah ben oui je n'ai jamais utilisé de selectItems avant je n'aurais pas pensé que c'était un objet particulier ^^.

    Bon alors je transforme ma liste en selectItems... Mais pourquoi avec suggestionValues il allait me mettre l'objet ciblé par value dans l'élément de la liste séléctionné via la comboBox et non l'inverse scrogneugneu ? C'est quand même étrange et conceptuellement ca me titille de mettre des selectItems alors qu'il y a un tag sensé faire ça très bien dans le composant que j'utilise ^^'

  18. #18
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    si ça titille tant que ça, regarde la documentation d'abord, tu comprendra tout, si les concepteurs de la comboBox lui ont ajouté le support de SelectItems, ce n'est pas pour rien, pour ma part j'utilise que ça, jamais suggestedValues.

  19. #19
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    bon, j'ai donc ajouter dans ma classe ListePersonne une methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public LinkedList<SelectItem> selectItems()
    	{
    		LinkedList<SelectItem> lisIt=new LinkedList<SelectItem>();
    		for(Personne p:this)
    		{
    			lisIt.add(new SelectItem(p,p.toString())); /*essayé aussi avec (p.toString(),p.toString()) sans plus de résultat */
    		}
    		return lisIt;
    }
    Mais quand je la passe aux comboBox, le résultat est vide

  20. #20
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu as redéfini la méthode toString() de ton objet?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Peupler une ComboBox avec des objets perso
    Par gallab dans le forum Flex
    Réponses: 2
    Dernier message: 23/06/2010, 07h18
  2. Réponses: 2
    Dernier message: 10/04/2010, 23h01
  3. Faire le lien entre une listBox et des donnees
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 18/11/2008, 17h01
  4. Populer COMBOBOX avec des objets persos
    Par MaitreTsiang dans le forum Flex
    Réponses: 3
    Dernier message: 29/09/2008, 11h05
  5. [DAO] Faire le lien entre les VO et les Objets Métiers
    Par mauvais_karma dans le forum Hibernate
    Réponses: 12
    Dernier message: 25/11/2005, 15h19

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