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

Struts 1 Java Discussion :

Doublons dans un DropDownBox


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Par défaut Doublons dans un DropDownBox
    Bien a vous,

    Ya t il un moyen d'eliminer les doublons dans une liste deroulante.
    dans la liste il ya pas mal de repetitions, je veux liste chaque element une seul fois
    voici mon morceau de code:

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <tr>
    <td>
          <html:select property="fsp_id">
           <html:options collection="statusAll" property="fsp_id"  />
          </html:select>
    </td>
    </tr>
    merci

  2. #2
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Bonjour,

    les Set permettent de supprimer les doublons

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    java.util.List liste = new java.util.ArrayList();
    liste.add("test");
    liste.add("test");
     
    System.out.println("avec doublon :"+liste);
     
    liste = new java.util.ArrayList(new java.util.HashSet(liste));
     
    System.out.println("sans doublon :"+liste);
    si cela peut aider.

  3. #3
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut


    tu dois le faire au moment où tu remplis ta collection.

    Donc, si tu la remplis avec une requête SQL, tu dois la faire de tel manière qu'elle supprime les doublons avec l'instruction DISTINCT ou GROUP BY par exemple

    Si ce n'est pas par SQL, il faut le faire à la main en recherchant si l'element que tu insères n'est pas déjà présent :
    exemple avec une list de type String :
    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
     
    // init des varaibles
    List<String> listDest = new ArrayList();
    List<String> listSrc = new ArrayList();
     
    // je remplie la liste source à la main pour avoir des infos à tester
    listSrc.add("toto");
    listSrc.add("titi");
    listSrc.add("tutu");
    listSrc.add("toto");
    listSrc.add("titi");
    listSrc.add("tutu");
     
    Iterator<String> it = listSrc.iterator();
    while(it.hasNext())
    {
       String sVal = it.next();
       if(listDest.indexOf(sVal) < 0)
          listDest.add(sVal);
    }
    Si tu stockes des objets qui ne sont pas de type basic comme String, int, etc ...
    il faut que tu override la fonction equals dans ta classe comme suit :
    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
     
    @Override
        public boolean equals(Object obj) {
     
            // Vérification de l'égalité des références
            if (obj == this) {
                return true;
            }
     
            // Vérification du type du paramètre
            if (obj instanceof TaClasse) {
     
                // Vérification des valeurs des attributs
            	TaClasse other = (TaClasse) obj;
     
            	// Pour les attributs de type objets 
                // on compare dans un premier temps les références 
                if (this.id != other.id) {
                    // Si les références ne sont pas identiques
                    // on doit en plus utiliser equals()
                    if (this.id == null || !this.id.equals(other.id)) {
                        return false; // les attributs sont différents 
                    }
                }
     
                // Si on arrive ici c'est que tous les attributs sont égaux :
                return true;
            }
     
            return false;
        }
    ou alors utiliser aussi un Hashset comme le propose fnobb

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Bonjour,

    N'y a-t-il aucune solution pour supprimer les doublons en passant par les collections et sans y toucher au niveau de la base de donnée? ni de convertir en array list?

    Merci !

  5. #5
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut


    A ma connaissance non, vu que c'est toi qui la remplie, donc c'est à toi dans ton code à faire le boulot pour ne pas mettre n'importe quoi dedans, notamment les doublons.

    Les solutions proposées ci-dessus utilisent déjà des collections (voir la faq) sous forme de ArrayList.
    De toute façon, c'est cela qu'attend le tag struts.

    est-ce que tu peux être plus explicite par rapport à ta demande ? Donner plus de détail par rapport à ton pb ?

    @+

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Par défaut
    Disons que je vois bien qu'ils utilisent des arraylists.

    Je récupère le contenu d'une table en passant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QueryByCriteria query5 = new QueryByCriteria(ActionCommerciale.class);
    setOutput(OUT_DATEDEFID, broker.getCollectionByQuery(query5));
    Mais je souhaiterais partir de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Collection datedefid = (Collection)service.getOutput(InitPortefeuilleBusinessService.OUT_DATEDEFID);
    // On fait un getsession() car on a besoin de récupérer des objets JAVA dans nos pages .jsp
    request.getSession().setAttribute("DatedeFid", datedefid);
    A ce que j'ai lu et ce qui parait évidant c'est de faire un set avant de mettre les objets dans la collection.
    Or je ne souhaite pas remplir ma liste à la main en passant par du :
    set.add("CCCCC");
    set.add("BBBBB");
    set.add("DDDDD");
    set.add("BBBBB");
    set.add("AAAAA");

    J'essaie de voir comment je pourrais passer à du set tout en restant sur cette base de collection.

    Si je peux faire quelque chose à partir due la class du bean ou dans l'action..

  7. #7
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut


    il y a qq chose que je ne comprends pas
    A un moment donnée tu parles de :
    N'y a-t-il aucune solution pour supprimer les doublons en passant par les collections et sans y toucher au niveau de la base de donnée? ni de convertir en array list?
    puis ensuite tu parles :
    Collection datedefid = (Collection)service.getOutput(InitPortefeuilleBusinessService.OUT_DATEDEFID);
    // On fait un getsession() car on a besoin de récupérer des objets JAVA dans nos pages .jsp
    request.getSession().setAttribute("DatedeFid", datedefid);
    Moi, d'après ce que je comprends, c'est que ton datedefid est initailisé par la résultat de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Collection)service.getOutput
    et qu'ensuite tu sauvegarde datedefid en session.

    Toujours d'après ce que je comprends, ton problème pour enlever les doublons, etc, se situe dans la fonction service.getOutput.

    Comme je l'ai dit auparavant, la classe Collection est la classe mère abstraite à tout ce que est ArrayList, HashSet, etc ...
    Donc, tu peux très bien écrire les fonctions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public Collection getOutput()
    {
            HashSet hs = new HashSet();
            /*  ton traitement */
            return hs;
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public Collection getOutput()
    {
            ArrayList al = new ArrayList ();
            /*  ton traitement */
            return al;
    }
    et donc, utiliser ce bout de code sans initialisé ta collection avant.
    Collection datedefid = (Collection)service.getOutput(InitPortefeuilleBusinessService.OUT_DATEDEFID);
    // On fait un getsession() car on a besoin de récupérer des objets JAVA dans nos pages .jsp
    request.getSession().setAttribute("DatedeFid", datedefid);
    Ce que tu peux faire aussi, c'est cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Collection datedefid = new HashSet();
    datedefid.adAll( (Collection)service.getOutput(InitPortefeuilleBusinessService.OUT_DATEDEFID));
    // On fait un getsession() car on a besoin de récupérer des objets JAVA dans nos pages .jsp
    request.getSession().setAttribute("DatedeFid", datedefid);
    En théorie, il fait le boulot qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    set.add("CCCCC");
    set.add("BBBBB");
    set.add("DDDDD");
    set.add("BBBBB");
    set.add("AAAAA");
    J'espère avoir cerné ta demande

Discussions similaires

  1. [access]doublons dans une table en access !
    Par hackerandco dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/06/2004, 14h45
  2. [CR] doublon dans les valeurs
    Par Gaëtane dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 02/06/2004, 15h25
  3. [langage] Suppression de doublon dans tableau
    Par LFC dans le forum Langage
    Réponses: 5
    Dernier message: 15/04/2004, 14h08
  4. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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