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 la valeur d'une liste


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Par défaut Récupérer la valeur d'une liste
    Bonjour,

    J'ai un formulaire où il a une liste (en l'occurence une selectonelistbox). J'aimerai récuperer dans mon managed bean la valeur choisie par l'utilisateur. J'ai trouvé plusieurs sujets sur des forums diverses et je me demande si on est bien obligé de créer une implémentation de Converter, si oui j'aimerai savoir pourquoi et comment faut-t'il l'implémenter, si non j'aimerai savoir comment peut-on le contourner.

    Pour info, voici comment je créé mes SelectItem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new SelectItem(useType, useType.getName()) // où useType est un objet de type UseType
    Merci d'avance pour vos lumières !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Par défaut
    Dans l'attente d'une solution plus simple, j'ai essayé de codé un converter. Tout d'abord voici mon jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:selectOneListbox value="#{managedBeanTool.tool.category}" converter="#{managedBeanTool.categoryConverter}">
        <f:selectItems value="#{managedBeanRead.categoryItems}" />
    </h:selectOneListbox>
    où tool.category est un objet de type Category et categoryItems est une liste de SelectedItem dont les éléments sont créés de la meme manière que dans mon message précédent.

    Voici enfin mon converter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	@Override
    	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
    		return session.read(clazz, "id", arg2).get(0);
    	}
     
    	@Override
    	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
    		return String.valueOf(((Pojo) arg2).getId());
    	}
    où session.read me permet de récuperer des entrées de ma base de donnée.

    A l'exécution, j'ai un message d'erreur sur ma console jboss :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sourceId=j_id11:j_id22[severity=(ERROR 2), summary=(j_id11:j_id22: Validation Error: Value is not valid), detail=(j_id11:j_id22: Validation Error: Value is not valid)]
    Quelqu'un pourrait il me dire d'où peut venir cette erreur? Merci!

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    Ce qui est sur c'est que le plus simple si tu utilises des objets (et non pas des types primitifs ou des String) c'est d'implémenter ton converter.

    La méthode public
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2)
    a pour rôle de tranformer une chaine de caractères (String) en un objet du type que tu veux manipuler. Le moyen pour y parvenir est à ta charge.
    Dans ton code arg2 doit être la valeur qui sera située dans l'attribut value de l'option que tu auras sélectionnée. (Dans le code HTML je parle).
    Et il faut que tu retournes l'objet qui correspond à ce choix.

    La méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2)
    a le rôle opposé, c'est à dire qu'à partir de l'objet, tu dois retourner une chaine de caractère qui sera placée dans l'attribut value de la balise option dans ton code HTML.

    Un exemple en vitesse:

    Tu veux afficher une liste de voitures. Tu as des objets de type Voiture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Voiture {
       private String id;
       private String marque;
    // on suppose qu'il y a les getters et setters
    }
    Ta liste sera composée de SelectItem comme tu l'as déjà fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new SelectItem(uneVoiture, uneVoiture.getId())
    Ton converter aura la tête suivante :
    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
    @Override
    	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
                    // Le but ici est de retourner un objet de type Voiture qui correspond à la valeur arg2
                    // A toi de voir comment tu récupères l'objet voiture, si tu le crées, etc...
                    // Imaginons qu'on a une liste à disposition avec toutes les voitures connues
                    // de la forme List<Voiture> listeVoitures;
                    // tu pourrais faire :
                   for (Voiture voiture : listeVoitures) {
                       if (voiture.getId().equals(arg2) {
                           return voiture;
                       }
                   }              
                   return null;
    	}
     
    	@Override
    	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
    		// ici le but est de retourner une chaine de caractère qui représente ta voiture passée en argument (arg2, et oui, c'est ta voiture !)
                    return ((Voiture) arg2).getId();
    	}
    Alors bien sur il y a des tests en plus à faire dans ces deux méthodes (le type est-il le bon, les valeurs ne sont-elles pas nulles, etc.)

    Voilà l'idée. N'hésite pas à redemander si tu n'as pas compris.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Par défaut
    Merci beaucoup pour ta réponse.

    Ca marche bien avec un converter. A noter qu'il ne faut pas oublier de créer la méthode equals pour l'objet qu'on veut utiliser dans la liste.

    Probléme résolu!

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

Discussions similaires

  1. comment récupérer la valeur d'une liste dans un servlet
    Par marwanos dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 11/04/2007, 00h58
  2. Récupérer la valeur d'une liste dans une autre page
    Par olivier94 dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 11h20
  3. Réponses: 4
    Dernier message: 13/11/2006, 17h49
  4. récupérer la valeur d'une liste à l'envoi d'un formulaire
    Par grinder59 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/01/2006, 10h49
  5. récupérer la valeur d'une liste déroulante dynamique
    Par grinder59 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 23/01/2006, 17h51

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