Salve a tutti,
siccome è la prima volta che scrivo, mi presento. Sono Roberto, ho 24 anni e vivo a Napoli. Sto sviluppando un'applicazione web che prevede la gestione di un carrello elettronico. L'approccio che ho seguito è usare un javabean per il carrello, e due pagine jsp per la visualizzazione dei prodotti rispettivamente nel supermarket e nel carrello.Ora vi posto i codici:

- questo è relativo al javabean (Carrello.java)
codice:
package mybean;

import java.beans.*;
import java.io.Serializable;
import java.util.Hashtable;
import java.util.Enumeration;

/**
 *
 * @author Roberto Iula
 */
public class Carrello implements Serializable {

    public static final String PROP_SAMPLE_PROPERTY = "sampleProperty";

    private String sampleProperty;

    private PropertyChangeSupport propertySupport;

    //variabile di tipo Hashtable utilizzata per emorizzare gli elementi presenti nel carrello 
    protected Hashtable cd = new Hashtable();

//varibile intera utilizzata per la memorizzazione del numero di CD attualmente nel carrello
private int numCd;

    public Carrello() {
        propertySupport = new PropertyChangeSupport(this);
        numCd=0;
    }

    public String getSampleProperty() {
        return sampleProperty;
    }

    public void setSampleProperty(String value) {
        String oldValue = sampleProperty;
        sampleProperty = value;
        propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY, oldValue, sampleProperty);
    }


    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.removePropertyChangeListener(listener);
    }

    //metodo per ottenere il numero di CD attualmente nel carrello
public int totCD(){
    return numCd;
}//numCD

// Inserimento di cd nel carrello
// I: id: indice chiave di identificazione del CD
// art: nome dell'artista
// tit: titolo dell'album
// prezzo: prezzo del CD

public void aggiungiCd (String id, String art, String tit, float prezzo){

//inserimento in un vettore di stringhe degli attributi del CD appena inserito nel carrello
//è inserito inoltre il numero di CD di quel tipo ordinati
String[] dati_cd= {art, tit, Float.toString(prezzo) , "1", id};
numCd++;
//se il CD è non già stato ordinato
if (!cd.containsKey(id))
{
    //inserisci il CD nel carrello
    cd.put(id, dati_cd);
}//if
//altrimenti
else
{
    //incrementa il numero di CD di quel tipo ordinati
    int tmp;
    String[] datiTemp = (String[])cd.get(id);
    tmp = Integer.parseInt(datiTemp[3]);
    tmp++;
    datiTemp[3]=Integer.toString(tmp);
    cd.put(id, datiTemp);
}//else
}//aggiungiCd

//Metodo di rimozione dal carrello di un CD
//I: id: indice del CD da rimuovere
public void rimuoviCd (String id)
{
    //se il CD è presente nel carrello
    if (cd.containsKey(id))
    {
        //decrementa il numero di CD
        numCd--;
        String[] temp = (String[])cd.get(id);
    //se il CD è presente in copia singola
    if (Integer.parseInt(temp[3]) == 1)
        //elimina il CD dal carrello
        cd.remove(id);
    //altrimenti
    else
    {
        //decrementa il numero di copie di quel CD ordinate
        int tmp = 0;
        String[] datiTemp = (String[])cd.get(id);
        tmp = Integer.parseInt(datiTemp[3]);
        tmp--;
        datiTemp[3]=Integer.toString(tmp);
        cd.put(id, datiTemp);
    }//else
}//if
}//rimuoviCd

//Metodo per la creazione di un oggetto Enumeration utilizzato per scorrere
//velocemente gli elementi nel carrello
public Enumeration enumera() {
return cd.elements();
}//enum


//Metodo che restituisce il prezzo totale dei CD inseriti nel carrello fino adesso
public float spesaTot(){
    float tot = 0.00f;
    String[] temp;
    //crea l'oggetto Enumeration
    Enumeration i = this.enumera();
    //finchè ci sono elementi nel carrello
    while (i.hasMoreElements()){
        temp = (String[])i.nextElement();
        //incrementa la spesa totale del prezzo del CD corrente
        tot += (Float.parseFloat(temp[2]) * Integer.parseInt(temp[3]));
    }//while
    return tot;
}//spesaTot

//Metodo che restituisce il prezzo di un CD moltiplicato per il numero delle
//copie ordinate I: id:indice del CD
public float prezzo(String id){
String[] temp;
float tmp=0.0f;
temp = (String[])cd.get(id);
tmp = Float.parseFloat(temp[2]) * Integer.parseInt(temp[3]);
return tmp;
}//prezzo

}
- questa è la jsp di visualizzazione dei prodotti disponibili (index.jsp)

codice:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page language="java" import="mybean.Carrello" %>
<%@page language="java" import="javax.servlet.*" %>
<%@page language="java" import="javax.servlet.http.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<HTML>

<HEAD>
<TITLE>Supermarket On-line</TITLE>
</HEAD>

<BODY bgcolor="#33CCCC" text="#000099" vlink="#990099" alink="#000099">

<!-istanziazione del bean Carrello.jsp, con ambito session -->
<jsp:useBean id="Carrello" scope="session" class="mybean.Carrello" />

<%
//Carrello car;
String id = request.getParameter("id");
/*session=request.getSession();
if (session.isNew())
{
    car=new Carrello();
    session.setAttribute("Carrello",car);
}
else
    car=(Carrello) session.getAttribute("Carrello");*/
//se è stato aggiunto un CD al carrello
if (id != null)
{
//acquisisci i dati del CD
String prodotto=request.getParameter("Prodotto");
String descrizione=request.getParameter("Descrizione");
float prezzo = Float.parseFloat(request.getParameter("Prezzo"));
//e aggiungilo al carrello

Carrello.aggiungiCd (id, prodotto, descrizione, prezzo);
}//if
%>

<font face="Verdana" size="6">
<center>
CATALOGO PRODOTTI A DISPOSIZIONE 


</center>
</font>

<font face="Verdana" >
 Quantità attualmente nel carrello: <%= Carrello.totCD() %> 



<center>
<table width="60%" border="1" align="center" bordercolorlight="#990099"
bordercolordark="#990099"> <tr>
<th>Prodotto</th>
<th>Descrizione</th>
<th>Prezzo</th>
</tr>
<tr>
<form action="index.jsp" method="post">
<td>Caffe'</td>
<td>kimbo 750 gr.</td>
<td>25.00</td>
<td><center><input type="submit"  name="acquista"
value="Aggiungi al carrello"></center></td>
<input type="hidden" name="id" value="1">
<input type="hidden" name="Prodotto" value="Caffe'">
<input type="hidden" name="Descrizione" value="Kimbo 750 gr.">
<input type="hidden" name="Prezzo" value="25.00">
</form>
<td>
</tr>
<tr>
<form action="index.jsp" method="post">
<td>Frutta</td>
<td>mele melinda</td>
<td>35.00</td>
<td><center><input type="submit"  name="acquista"
value="Aggiungi al carrello"></center></td>
<input type="hidden" name="id" value="2">
<input type="hidden" name="Prodotto" value="Frutta">
<input type="hidden" name="Descrizione" value="mele melinda">
<input type="hidden" name="Prezzo" value="35.00">
</form>
<td>
</tr>
<tr>
<form action="index.jsp" method="post">
<td>Liquori</td>
<td>vodka al melone</td>
<td>35.00</td>
<td><center><input type="submit" name="add" name="acquista"
value="Aggiungi al carrello"></center></td>
<input type="hidden" name="id" value="3">
<input type="hidden" name="Prodotto" value="Liquori">
<input type="hidden" name="Descrizione" value="vodka al melone">
<input type="hidden" name="Prezzo" value="35.00">
</form>
<td>
</tr>
</table>
</center>
</font>
</BODY>
</HTML>
- questa è la jsp di visualizzazione del carrello (VisCarr.jsp)

codice:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page language="java" import="mybean.Carrello" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">


<%@ page import="java.util.*" %>
<%@ page import="java.lang.*" %>



<jsp:useBean id="Carrello" scope="session" class="mybean.Carrello" />


<HTML>

<HEAD>
<TITLE>Carrello della spesa</TITLE>
</HEAD>

<BODY bgcolor="#33CCCC" text="#000099" vlink="#990099" alink="#000099">
<%
//Carrello car= (Carrello) session.getAttribute("Carrello");
String idtmp = request.getParameter("idtmp");
//se è stato eliminato un CD dal carello
if (idtmp != null){
    Carrello.rimuoviCd(idtmp);
    //session.setAttribute("Carrello", car);
}//if
%>
<font face="Verdana" size="6">
<center>
CARRELLO
</center>
</font>



<font face="Verdana">
Quantità attualmente nel carrello:

</font>



<center>
<table width="60%" border="1" align="center" bordercolorlight="#990099"
bordercolordark="#990099"> <tr>
<th>Prodotto</th>
<th>Descrizione</th>
<th>Prezzo (L.)</th>
<th>Quantità</th>
</tr>

<%
//creazione di un oggetto Enumeration
Enumeration ogg = Carrello.enumera();
String[] temp;

//finchè ci sono elementi nel carrello
while (ogg.hasMoreElements()){
temp= (String[])ogg.nextElement();
%>

<tr>
<td><%= temp[0] %></td>
<td><%= temp[1] %></td>
<td><%= Carrello.prezzo(temp[4])%></td>
<td><%=temp[3] %></td>
<td><center></center></td> <td><center>
    <form action="VisCarr.jsp" method="post" />
        <input type="submit" name="elimina" value="elimina" /></center></td>
        <input type="hidden" name="idtmp" value="<%= temp[4]%>" />
<td>
</tr>
<%
}//while
%>
<tr>
<td></td>
<td>Tot</td>
<td><%= Carrello.spesaTot()%></td>
<td><center><%= Carrello.totCD()%></center></td>
</tr>

</table>
<font size="2">
[ Indietro ]
</font>
</center>

</BODY>
</HTML>
il mio problema è il seguente: in fase di aggiunta, non ci sono problema. Quando invece vado ad eliminare, ad esempio, il secondo, il terzo, ecc. oggetto del carrello, mi elimina sempre il primo.

N.B. se li elimino in ordine, funziona.

Qualcuno potrebbe aiutarmi? grazie in anticipo e spero di essere stato chiaro.