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 :

Comment récupérer l'indice d'un SelectOneMenu ?


Sujet :

JSF Java

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2007
    Messages : 165
    Points : 119
    Points
    119
    Par défaut Comment récupérer l'indice d'un SelectOneMenu ?
    Bonsoir,
    Je n'arrive pas à trouver le getters permettant de récupérer l'indice d'un composant SelectOneMenu, pourtant j'ai tout essayé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void changementCategorie(ValueChangeEvent e){
            FacesContext current = FacesContext.getCurrentInstance();
     
            if ("Chaine".equals(e.getNewValue())) {   
            HtmlSelectOneMenu h = (HtmlSelectOneMenu)e.getSource();
            ???
    Comment faire ? Merci.

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Je ne crois pas que le composant te permette de récupérer l'indice. Mais après tout, quel en serait l'intérêt ? L'important c'est de récupérer l'ID de l'élément sélectionné dans la liste, non ?

    Au pire, tu peux toujours récupérer l'élément choisi par l'utilisateur, puis parcourir la liste des SelectItems pour retrouver cet élément, ce qui te donnera l'indice. Mais je n'en vois toujours pas l'intérêt
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2007
    Messages : 165
    Points : 119
    Points
    119
    Par défaut
    Je vous remercie pour votre prompt réponse.
    Le problème c'est que j'utilise selectItems et non selectItem. Dans ce dernier je peux spécifier le label et le value, contrairement au premier où le label est la valeur.
    J'ai besoin de faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <option value="1">valeur1</option>
    <option value="43">valeur43</option>
    Cela semble être possible qu'avec selectItem et non selectItems.
    Donc ma question, si je peux éviter de récupérer l'indice, comment réaliser cela dynamiquement ?

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Le selectItem et selectItems sont pareils, à ceci près que les selectItem sont écrits statiquement dans la page JSF, alors que le selectItems est récupéré par un getter Java.
    Mais rien ne t'oblige à créer des selectItems avec des valeurs qui soient identiques aux labels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public List<SelectItem> getMaListe() {
        if (maListe == null) {
            maListe.add(new SelectItem(1, "Valeur 1"));
            maListe.add(new SelectItem(42, "LA réponse"));
        }
        return maListe;
    }
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2007
    Messages : 165
    Points : 119
    Points
    119
    Par défaut
    Salut,
    Ça par contre je ne le savais pas. Je te remercie, je vais essayer de suite ! C'est bon c'est réglé.
    Edit: Une autre question s'il vous plait. Comment vérifier que Valeur 1 n'est pas déjà déclaré dans la liste ? J'ai essayé avec contains mais cela n'a pas marché.

  6. #6
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Normal que ça ne fonctionne pas, car la méthode contains va se baser sur la méthode equals pour chercher l'existence d'un élément dans ta liste.

    Tu cherches à faire quoi au juste ? Ne pas avoir 2 fois le même label dans ta liste ?

    Tu peux éventuellement utiliser la fonction suivante pour tester si un SelectItem de même label existe déjà dans la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private boolean isLabelPresent(String label, List<SelectItem> list) {
        if ((list == null) || list.isEmpty()) {
            return false;
        }
        for (SelectItem si : list) {
            if (si.getLabel().equals(label)) {
                return true;
            }
        }
        return false;
    }
    Mais bon, c'est quand même pas top, vu qu'à chaque addition tu itères sur la liste. L'idéal est de faire attention aux données que tu récupères de la base (si la liste est remplie par des données de base), afin d'éviter les doublons...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2007
    Messages : 165
    Points : 119
    Points
    119
    Par défaut
    Je vous remercie pour vos réponses, vous m'avez été d'une aide précieuse.

    J'ai fais cela après la fin des ajouts des items, pour éviter de boucler énormément.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(listID != null && listID.size() > 1){
                for(int i=1; i<listID.size();i++){
                    if(listID.get(i).getLabel().equals(listID.get(i-1).getLabel())){
                        listID.remove(i);
                    }
                }
            }
    Je pourrais très bien faire une requête EJB-QL avec la clause Group By afin d'éviter les doublons, mais ce serait une méthode distante de plus que je préfère éviter.

    Encore merci.

  8. #8
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Franchement, si tu peux filtrer ta liste dès la couche BD, autant le faire là. Non seulement les filtres (bien faits) en base risquent d'être plus rapides (bon, ça dépend beaucoup du filtre, j'admets) mais surtout, tu éviteras de rapatrier des données inutiles depuis ta base...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2007
    Messages : 165
    Points : 119
    Points
    119
    Par défaut
    Ces données ont déjà une autre fonctionnalité ailleurs, c'est pour cela que j'évite de crée une nouvelle méthode

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

Discussions similaires

  1. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  2. Réponses: 3
    Dernier message: 19/11/2007, 11h42
  3. Comment récupérer l'indice dans un TdxTreeList ?
    Par claude dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2004, 15h17
  4. Comment récupérer le VK_TAB ?
    Par henderson dans le forum C++Builder
    Réponses: 5
    Dernier message: 11/12/2002, 11h32
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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