bonsoir à tous,
je voudrais developper un panier avec les servlets, j'ai en premier lieu un probleme avec les vecteurs:
*classe produit
* servlet PanierCode:
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; } }
ca me retourne une exception:Code:
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); }}
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.Code:
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.
avez vous idée? je bloque la dessus :(
merci de votre aide !