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 :

Suppression d'un objet dans une ArrayList mal gérée?


Sujet :

JSF Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Points : 85
    Points
    85
    Par défaut Suppression d'un objet dans une ArrayList mal gérée?
    Bonjour,

    J'ai un tableau (webuijsf table) qui est bindé avec une liste d'objet "Book" (ArrayList).

    J'ai une fonction qui me permet d'ajouter des objets dans cette liste ce qui met à jour mon tableau. Jusque là tout est normal.

    Cependant, lorsque je veux réaliser l'opération inverse, (list.remove au lieu de list.add) mon tableau de se met pas à jour comme si rien ne s'était supprimé de ma liste. Par contre, lorsque je vide complètement mas liste ça fonctionne...

    Fonction d'ajout (qui fonctionne) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    protected void AjoutPanier(Integer id) {
     
            Book currentBook = findBookById(id);
     
            panier.add(currentBook);
     
    }
    Fonction de suppression qui môôôrche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    protected void DelPanier(Integer id) {
     
            Book currentBook = findBookById(id);
     
            panier.remove(currentBook);
     
     
    }
    Du coup, j'ai réussi à contourner un peu près la chose en itérant sur ma liste pour en créer une nouvelle que j'affecte finalement à l'autre (assez tordu j'avoue) :

    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
     
    // Méthode tordue...
     
    List<Book> tmpBookList = new ArrayList<Book>();
     
            Iterator<Book> it = panier.iterator();
     
            while(it.hasNext()) {
                Book bkk = it.next();
     
                if (!bkk.getIdBook().equals(id)) {
                    tmpBookList.add(it.next());
                }
            }
     
            panier.clear();
     
            panier = new ArrayList<Book>(tmpBookList);
    Alors si quelqu'un peut m'expliquer pourquoi ça ne fonctionne pas, je suis vraiment preneur parce que là je ne vois vraiment pas ce que je fais de mal...

  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
    Points : 5 059
    Points
    5 059
    Par défaut
    As tu surcharger les méthodes equals et HashCode de ton objet Book?

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Points : 85
    Points
    85
    Par défaut
    J'ai ajouté ces méthodes dans ma classe Book :

    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
     
    @Override
        public boolean equals(Object obj) {
            return super.equals(obj);
        }
     
        @Override
        public int hashCode() {
            return super.hashCode();
        }
     
        @Override
        public String toString() {
            return super.toString();
        }
    Mais malgré ça je n'ai toujours aucun résultat

  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
    Points : 5 059
    Points
    5 059
    Par défaut
    Ce n'est pas la bonne..
    Si tu utilise Eclipse, il les généres automatiquement tu peux voir à quoi ça ressemble..
    En gros, il faut pouvoir comparer deux instances de ton objets, si tu appelle les méthodes de la classe mère ça ne sera possible..

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Points : 85
    Points
    85
    Par défaut
    J'ai généré les bonnes fonction equals et hashCode et j'obtenais toujours le même problème.

    Par contre j'ai remarqué que en réactualisant ma page, c'était bon. Donc j'en arrive à la conclusion qu'il doit y avoir quelques problèmes de rafraichissement de mon tableau ou de ma page. J'avais en effet remarqué quelques bugs d'affichage même lors de l'ajout parfois où il m'insérait une ligne affichée comme vide bien qu'elle ne l'était pas en fait...

    Pour en finir avec ce problème, existe-t-il une fonction ou un moyen de correctement "réactualiser" l'affichage d'un tableau ou des ses composants en JSF/Java ?

    J'ai regardé du côté de la FAQ mais je ne rien trouve à ce sujet. Il y aurait apparemment moyen d'utiliser les RichFaces pour faire ceci, mais n'est-ce pas possible juste en JSF ?

  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
    Points : 5 059
    Points
    5 059
    Par défaut
    si tu montre comment tu fais l'action JSF, on pourrait mieux comprendre ce qui ne va pas..

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Points : 85
    Points
    85
    Par défaut
    Le code JSF du tableau que je souhaite rafraichir est le suivant :

    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
     
    <webuijsf:table augmentTitle="false" binding="#{Titles.table1}" id="tablePanier" paginateButton="true" paginationControls="true"
                                rendered="true" style="left: 768px; top: 216px; position: absolute; width: 432px; z-index: 1" title="Mon panier" width="432">
                                <webuijsf:tableRowGroup emptyDataMsg="Votre panier est vide." id="tableRowGroup2" rows="10" sourceData="#{SessionBean.panier}" sourceVar="currentRow">
                                    <webuijsf:tableColumn headerText="idBook" id="tableColumn11" sort="idBook" visible="false">
                                        <webuijsf:staticText id="staticText10" text="#{currentRow.value['idBook']}"/>
                                    </webuijsf:tableColumn>
                                    <webuijsf:tableColumn headerText="title" id="tableColumn6" sort="title">
                                        <webuijsf:staticText id="staticText1" text="#{currentRow.value['title']}"/>
                                    </webuijsf:tableColumn>
                                    <webuijsf:tableColumn headerText="author" id="tableColumn7" sort="author">
                                        <webuijsf:staticText id="staticText5" text="#{currentRow.value['author']}"/>
                                    </webuijsf:tableColumn>
                                    <webuijsf:tableColumn headerText="publisher" id="tableColumn8" sort="publisher">
                                        <webuijsf:staticText id="staticText6" text="#{currentRow.value['publisher']}"/>
                                    </webuijsf:tableColumn>
                                    <webuijsf:tableColumn headerText="stock" id="tableColumn9" sort="stock">
                                        <webuijsf:staticText id="staticText7" text="#{currentRow.value['stock']}"/>
                                    </webuijsf:tableColumn>
                                    <webuijsf:tableColumn headerText="Nombre" id="nbStockDel_column">
                                        <webuijsf:textField binding="#{Titles.nbStockDel}" id="nbStockDel" text="#{currentRow.value['nbStockDel_column']}"/>
                                    </webuijsf:tableColumn>
                                    <webuijsf:tableColumn id="del">
                                        <webuijsf:button actionExpression="#{Titles.button1_action}" id="boutonDel" text="Retirer du panier">
                                            <f:setPropertyActionListener target="#{SessionBean.selectedIdBook}" value="#{currentRow.value['idBook']}"/>
                                        </webuijsf:button>
                                    </webuijsf:tableColumn>
                                </webuijsf:tableRowGroup>
    </webuijsf:table>
    Comme vous pouvez sans doute le remarquer, je suis amené à supprimer ces fameux objets de ma liste à travers un clic bouton donc le code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <webuijsf:tableColumn id="del">
                                        <webuijsf:button actionExpression="#{Titles.button1_action}" id="boutonDel" text="Retirer du panier">
                                            <f:setPropertyActionListener target="#{SessionBean.selectedIdBook}" value="#{currentRow.value['idBook']}"/>
                                        </webuijsf:button>
    </webuijsf:tableColumn>
    J'ai ensuite défini l'action du bouton dans mon managed bean pour qu'il exécute une méthode de SessionBean qui supprime des objets de ma liste.

  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
    Points : 5 059
    Points
    5 059
    Par défaut
    je n'ai jamais utilisé cette librairie, mais, si tu utilise une action normal dont la méthode retourne null, tu dois normalement voir la table modifiée.

Discussions similaires

  1. Tableau d'objet dans une arrayList
    Par tomhoogata dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/12/2013, 21h47
  2. Parcourir et supprimer un objet dans une ArrayList
    Par Eausport dans le forum Collection et Stream
    Réponses: 32
    Dernier message: 03/08/2012, 10h28
  3. trier une liste d'objets dans une ArrayList
    Par sandrine49 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 13/10/2008, 08h59
  4. Réponses: 4
    Dernier message: 19/06/2007, 10h41
  5. [C#] Tri d'objet dans une ArrayList
    Par guillaume16 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/03/2006, 12h05

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