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

Servlets/JSP Java Discussion :

probleme avec mon panier


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Par défaut probleme avec mon panier
    bonsoir à tous,
    je voudrais developper un panier avec les servlets, j'ai en premier lieu un probleme avec les vecteurs:
    *classe produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Produit 
    {public String nomProduit;
    public int qteProduit;// pas de principe d'encapsulation, pas de methode accesseur par manque de temp... je met le tout public
     
    public Produit (String nomProduit,int qteProduit)
    {this.nomProduit=nomProduit;
    this.qteProduit=qteProduit;
    }
     
    }
    * servlet Panier
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
    public class Panier extends HttpServlet
     { public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
     	{int i; int j; String [] tab={"pomme","orange","banane","figue"};
         res.setContentType("text/html");
         PrintWriter out = res.getWriter();
     
        out.println("<html><body><form method='post' action='Essai'><table>");
        out.println("<input type='submit' value='envoyer'>");
         for( j=0;j<=tab.length;j++)
         	{
         	  out.println("<tr><br><td>"+tab[j]+"</td><td><select name="+tab[j]+">");
         	  for( i=0;i<=100;i++)
         	   {out.println("<option value="+i+">"+i+"</option>");}
         	   out.println("</select></td></tr>");
         	}
         out.println("</table></form></body></html>");
     
     
     
    }
     
    public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
    {   int val;String nom;
         Produit  element;
         int i;
         boolean trouve=false;
    	 res.setContentType("text/html");
         PrintWriter out = res.getWriter();
         HttpSession session=req.getSession(true);//recuperer la session si elle existe deja ou en creer une.
         Vector v=(Vector)session.getAttribute("vec");
         if (v==null) v=new Vector();//creer un vecteur s'il existe pas.
         Enumeration enu=req.getParameterNames();//recuperation des noms des parametre dans une enumeration.
     
         while (enu.hasMoreElements())
         	{nom=(String)enu.nextElement();//nom du param
         	val=Integer.parseInt(req.getParameter(nom));//valeur du param respectif
         	if (val!=0)  //pour une quantité non nulle chercher s'il ya deja un article de même nom pour y ajouter la valeur.
                               {for(i=0;i<v.size()||trouve;i++)
         	              {element=(Produit)v.elementAt(i);//recuperation d'un objet produit du vecteur
         	              if ((element.nomProduit).equals(nom)) // si le nom du produit commandé existe deja dans le vecteur faire:
                                                            {element.qteProduit+=val; // ajouter a la quantité ancienne la nouvelle quantité
         	                                                     v.remove(i); //supprimer l'ancienne case contenant l'objet produit avec l'ancienne quantité
         	                                                     v.addElement(element);//et la remplacer par le produit avec la nouvelle quantité(il parait que l'erreur se situe la).
         	                                                     trouve=true;}
         	              }
         	if (!trouve) //si le produit n'a pas été commandé avant.
     
                                 {Produit prod=new  Produit(nom,val);//en creer un nouveau
    	                 v.addElement(prod);}// et l'ajouter au vecteur
     
         	             }
     
    	    }
    	 session.setAttribute("vec",v);  //retourner le vecteur qui a été modifier dans la session
     
     	for(i=0;i<v.size();i++)// pour l'affichage du vecteur
     	{element=(Produit)v.elementAt(i);
        out.println("nom produit:"+element.nomProduit+"&& quantité"+element.qteProduit+"<br>");}
        doGet(req,res);
     
     
    }}
    ca me retourne une exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    exception 
     
    java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
    	java.util.Vector.elementAt(Unknown Source)
    	Essai.doPost(Essai.java:44)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     
     
    note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/5.5.20.
    en faite le principe du code est de recuperer les nom et valeur respectives du formulaire, puis chercher si pour une valeur non nulle ce produit a été deja commandé, pour faire ensuite la somme.
    avez vous idée? je bloque la dessus
    merci de votre aide !

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    question : pourquoi supprimes-tu/remets-tu l'objet dans le vecteur après avoir modifié sa quantité? la modification de l'objet "element" qui vient du Vecteur est "reportée" dans le Vecteur car, en java, c'est de l'Objet : passage par ADRESSE.

    Par ailleurs, tu devrais, dans un soucis de performance, plutôt utilisé l'interface java.util.List et l'implémentation java.util.ArrayList à la place de java.util.Vector car la class Vector est un objet synchronisé...

  3. #3
    Membre éclairé
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Par défaut
    bonsoir,
    tu as raison Mattheox,c'est un passage par adresse ca m'a vraiment echappé.
    j'ai trouvé la faute, c'est qqchose de banal mais bon il a fallu toute une soirée pour decouvrir l'origine du prob:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
    public class Essai extends HttpServlet
     { public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
     	{int i; int j; String [] tab={"pomme","orange","banane","figue"};
         res.setContentType("text/html");
         PrintWriter out = res.getWriter();
     
        out.println("<html><body><form method='post' action='Essai'><table>");
        out.println("<input type='submit' value='envoyer'>");
         for( j=0;j<=tab.length;j++)
         	{
         	  out.println("<tr><br><td>"+tab[j]+"</td><td><select name="+tab[j]+">");
         	  for( i=0;i<=100;i++)
         	   {out.println("<option value="+i+">"+i+"</option>");}
         	   out.println("</select></td></tr>");
         	}
         out.println("</table></form></body></html>");
     
     
     
    }
     
    public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
    {   int val;String nom;
         Produit  element;
         int i;
         boolean trouve=false;
    	 res.setContentType("text/html");
         PrintWriter out = res.getWriter();
         HttpSession session=req.getSession(true);
         Vector v=(Vector)session.getAttribute("v");
         if (v==null) v= new Vector();
         Enumeration enu=req.getParameterNames();
     
         while (enu.hasMoreElements())
         	{nom=(String)enu.nextElement();
         	val=Integer.parseInt(req.getParameter(nom));
         	if (val!=0)  {for(i=0;(i<v.size()&&!trouve);i++)//le probleme été a ce niveau,j'avais mis trouve=true et || a la place de &&, pas drole !
         	              {element=(Produit)v.elementAt(i);
         	              if ((element.nomProduit).equals(nom)) {element.qteProduit+=val;
     
         	                                                     trouve=true;}
         	              }
         	if (!trouve) {Produit prod=new  Produit(nom,val);
    	                 v.addElement(prod);}
     
         	             }
     
    	    }
    	 session.setAttribute("v",v);    
     	for(i=0;i<v.size();i++)
     	{element=(Produit)v.elementAt(i);
        out.println("nom produit"+element.nomProduit+"&& quantité"+element.qteProduit+"<br>");}
        doGet(req,res);
     
     
    }}
    Par ailleurs, tu devrais, dans un soucis de performance, plutôt utilisé l'interface java.util.List et l'implémentation java.util.ArrayList à la place de java.util.Vector car la class Vector est un objet synchronisé...
    merci pour l'info!
    et merci bcp pour ton aide

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

Discussions similaires

  1. probleme avec mon OS
    Par quaresma dans le forum Windows XP
    Réponses: 2
    Dernier message: 11/01/2006, 06h50
  2. Probleme avec mon algorithme de tri
    Par kaygee dans le forum Langage
    Réponses: 6
    Dernier message: 09/01/2006, 21h23
  3. Probleme avec mon professeur
    Par Hamza dans le forum Algorithmes et structures de données
    Réponses: 20
    Dernier message: 16/07/2005, 10h50
  4. [Thread] Probleme avec mon Timer
    Par Nico66 dans le forum EDT/SwingWorker
    Réponses: 10
    Dernier message: 02/06/2005, 17h10

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