Suppression ligne dans arraylist

gislaino Messages postés 4 Date d'inscription vendredi 6 septembre 2013 Statut Membre Dernière intervention 27 décembre 2014 - 7 sept. 2013 à 16:29
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 7 sept. 2013 à 19:21
A l'aide !!! c'est urgent!!! slt, je suis nouveau en programmation web java. et la j'ai vraiment besoin de votre aide. j'e suis en train de mettre en place un panier virtuel. j'ai un tableau contenant mes article avec une colonne ajouter, lorsque je clique sur ajouter j'obtiens un nouveau tableau contenant la nouvelle ligne et une colonne retirer.
voici mon code servlet
if(act.equals("ajouter")){

Integer idart=Integer.parseInt(req.getParameter("idart"));
String libart= req.getParameter("libart");
Float pu= Float.parseFloat( req.getParameter("pu"));
Integer stock=Integer.parseInt(req.getParameter("stock"));
Integer idcat=Integer.parseInt(req.getParameter("idcat"));

article art= new article();

art.setIdarticle(idart);
art.setLibarticle(libart);
art.setPrixunitaire(pu);
art.setStock(stock);
art.setIdcategorie(idcat);
list_article.add(art);
mon probleme c'est que lorsque je clique sur retirer dans le nouveau tableau il ne retire rien.
voici mon code servlet
else if(act.equals("retirer")){
// System.out.println("nnn");
//List mop;
Integer idart=Integer.parseInt(req.getParameter("idart"));
String libart= req.getParameter("libart");
Float pu= Float.parseFloat( req.getParameter("pu"));
Integer stock=Integer.parseInt(req.getParameter("stock"));
Integer idcat=Integer.parseInt(req.getParameter("idcat"));
article art= new article();

//list_artic.get(idart);
art.setIdarticle(idart);
art.setLibarticle(libart);
art.setPrixunitaire(pu);
art.setStock(stock);
art.setIdcategorie(idcat);
list_article.remove(art);
NB:
List <article> list_article= new ArrayList<article>(); a été déclarée dans la servlet comme variable globale.
merci d'avance pour votre aide, je compte vraiment sur vous.

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
7 sept. 2013 à 19:21
List <article> list_article= new ArrayList<article>(); a été déclarée dans la servlet comme variable globale.

Ne jamais rien mettre en global, après on peut faire tout et n'importe quoi, et c'est la porte ouverte à un code incorrigible, surtout si tu commences à manipuler la variable globale directement avec une JSP par exemple !

Autre remarque : plutôt que de faire des set pour chaque membre, il serait mieux d'avoir un constructeur avec tous les membres, voire même un constructeur qui prendrait toutes les String de ta requête...

public Article(Integer idart, String lib, Float pu, Integer stock, Integer idcat)
{
    this.idart = idart;
    this.lib = lib;
    this.pu = pu;
    this.stock = stock;
    this.idCat = idCat;
}

public Article(String idart, String lib, String pu, String stock, String idcat)
{
    this.idart = Integer.parseInt(idart);
    this.lib = lib;
    this.pu = Float.parseFloat(pu);
    this.stock = Integer.parseInt(stock);
    this.idcat = Integer.parseInt(idcat);
}

Toujours dans le but de simplifier, et organiser ton code au maximum, tu peux faire des enum sur les actions possibles, ou encore sur les champs que tu mets en paramètres :

// À définir dans la classe Article
static enum ParametresArticle {idart, libart, pu, stock, idcat }

// À définir dans la classe qui gère la liste
static enum Action {ajouter, retirer}

Ton code est alors beaucoup plus simple à maintenir :

Article art = new Article
(
    req.getParameter(Article.Parametres.idart),
    req.getParameter(Article.Parametres.lib),
    req.getParameter(Article.Parametres.pu),
    req.getParameter(Article.Parametres.stock),
    req.getParameter(Article.Parametres.idcat)
);

Action act = ?

switch (act)
{
    case ajouter :
        list_article.add(art);
        break;
    case retirer :
        list_article.remove(art);
        break;
}

Le truc, c'est que remove ne peut fonctionner que si la méthode equals a été redéfinie correctement, sinon il est impossible de savoir quel objet est à supprimer.

Cela passe donc par une redéfinition de equals :

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Article other = (Article) obj;
    if (idart == null) {
        if (other.idart != null)
            return false;
    } else if (!idart.equals(other.idart))
        return false;
/*  if (idcat == null) { // inutile si "idart" est unique
        if (other.idcat != null)
            return false;
    } else if (!idcat.equals(other.idcat))
        return false;
    if (lib == null) {
        if (other.lib != null)
            return false;
    } else if (!lib.equals(other.lib))
        return false;
    if (pu == null) {
        if (other.pu != null)
            return false;
    } else if (!pu.equals(other.pu))
        return false;
    if (stock == null) {
        if (other.stock != null)
            return false;
    } else if (!stock.equals(other.stock))
        return false; */
    return true;
}

Y a encore du boulot ^^
0
Rejoignez-nous