首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP購物車:正確向Servlet傳遞商品ID與購買數量

     編輯:程式設計綜合問答

問題現象

使用 <form> 提交時,Servlet 通過 request.getParameter() 獲取到的商品 ID 全是第一條記錄的 ID,無法區分用戶點擊的是哪件商品。

原因分析

JSP 中使用 <c:forEach> 遍歷商品列表,每行生成一個隱藏域 <input type="hidden" name="id" value="${goodslist.id}">。由於所有隱藏域 name 相同,表單提交時瀏覽器會發送多個同名參數,Servlet 默認取第一個值,導致始終獲得第一個商品的 ID。

解決方案

方案一:超鏈接傳 ID + AJAX 傳數量(推薦)

<!-- JSP -->
<c:forEach items="${goodslist}" var="goods">
    <tr>
        <td>${goods.name}</td>
        <td>
            <input type="button" value="-" onclick="decrease(this)">
            <input type="text" id="qty_${goods.id}" name="qty" value="1" size="3">
            <input type="button" value="+" onclick="increase(this)">
        </td>
        <td>
            <a href="javascript:addToCart('${goods.id}')">加入購物車</a>
        </td>
    </tr>
</c:forEach>

<script>
function addToCart(goodsId) {
    var qty = $('#qty_' + goodsId).val();
    $.get('shoppingcarServlet', {id: goodsId, num: qty}, function(resp){
        alert('添加成功');
    });
}
</script>

方案二:每行獨立 Form

<c:forEach items="${goodslist}" var="goods">
    <form action="shoppingcarServlet" method="post">
        <input type="hidden" name="id" value="${goods.id}">
        <input type="number" name="num" value="1" min="1">
        <input type="submit" value="加入購物車">
    </form>
</c:forEach>

Servlet 端接收

String goodsId = request.getParameter("id");
int quantity = Integer.parseInt(request.getParameter("num"));
// 業務處理...

關鍵點總結

  • 避免在單一 Form 中放置多個同名輸入框。
  • 採用 AJAX 可提升用戶體驗(無刷新添加)。
  • 隱藏域或 URL 參數傳遞 ID,輸入框傳遞數量,職責分離。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved