2011-03-16 9 views
1

おはよう!ハッシュマップの更新に関する問題

私はショッピングカートを作っており、お客様がチェックアウトする前に、一時的にハッシュマップ(セッション)に保存することに決めました。私の問題は、数量テキストボックス内のアイテムの数。次のように

私のコードは次のとおりです。

JSP:

<c:forEach var="cart" items="${cartList}"> 
    <form method="POST" action="ShoppingCartUpdate"> 
      ${cart.value.productId} 
      ${cart.value.productName} 
      ${cart.value.price} 
      <input type="text" value="${cart.value.quantity}"name="quantity"> 
      <input type="submit" value ="Update" name="Update"> 
    </form> 
</c:forEach> 

マイサーブレット:

int productId = Integer.parseInt(request.getParameter("productId"));//ERROR HERE.. 
int quantity = Integer.parseInt(request.getParameter("quantity")); 

Cart item = (Cart)cartList.get(productId); 
item.setQuantity(quantity); 
double price = item.getPrice(); 
subtotal = price * quantity; 

cartList.put(productId, item); 

私は数量フィールドに別の番号を入力した場合でも、それは更新されません。ホット私はそれを修正することができます。ありがとうございました。

EDIT:次のようにエラーがある:

WARNING: StandardWrapperValve[ShoppingCart]: PWC1406: Servlet.service() for servlet ShoppingCart threw exception 
java.lang.NumberFormatException: null 

答えて

2

あなたはリクエストパラメータとしてproductIdを期待しているが、あなたは全く形でそれを渡していません。これはnullとして到着し、これは整数として解析できないため、NumberFormatException: nullとなります。

同じフォームに以下を追加します。この行は不要で、

具体的な問題とは無関係の
<input type="hidden" name="productId" value="${cart.value.productId}" /> 

cartList.put(productId, item); 

を、それを削除。それはJavaであり、PHPなどではありません。 itemは既にマップに入っています。あなたはマップからそれを削除していません。すべての変更は、同じオブジェクトを参照するため、マップのitem参照に反映されます。

+0

あなたは命を救っています!ありがとうございました。 :) – newbie

+0

ようこそ。 – BalusC