servlet代碼
private void addCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
// TODO Auto-generated method stub
int id = Integer.parseInt(request.getParameter("id"));
//System.out.println(id);
Food food = foodService.getFoodById(id);
HttpSession session = request.getSession();
Map<Food, Integer> cart = (Map<Food, Integer>) session.getAttribute("cart");
if (null!=cart) {
if (cart.get(food)!=null) {
cart.put(food, cart.get(food)+1);
}else {
System.out.println("購物車裏沒有這個商品");
cart.put(food, 1);
}
}else{
cart=new HashMap<Food,Integer>();
cart.put(food, 1);
}
session.setAttribute("cart", cart);
//request.getRequestDispatcher("/front/detail/clientCart.jsp").forward(request, response);
response.sendRedirect("front/detail/clientCart.jsp");
}
主要通過session實現
前端代碼
<div id="menu">
<!-- 餐車div -->
<div id="count">
<table align="center" width="100%">
<tr height="40">
<td align="center" width="20%">菜名</td>
<td align="center" width="20%">單價</td>
<td align="center" width="20%">數量</td>
<td align="center" width="20%">小計</td>
<td align="center" width="20%">操作</td>
</tr>
<c:set var="total" value="0"></c:set>
<c:forEach items="${cart }" var="cart">
<tr height="60">
<td align="center" width="20%">${cart.key.foodName}</td>
<td align="center" width="20%">${cart.key.price}</td>
<td align="center" width="20%">
<input type="text" value="${cart.value }" size="3" lang="3" onblur="alterSorder(this)"/>
</td>
<td align="center" width="20%">${cart.key.price*cart.value}</td>
<td align="center" width="20%">
<input type="button" value="刪除" class="btn_next" lang="3" onclick="removeSorder(this)" />
</td>
<c:set var="total" value="${total+cart.key.price*cart.value }"></c:set>
</tr>
</c:forEach>
<tr>
<td colspan="6" align="right">總計:
<span style="font-size:36px;">¥ ${count}</span>
<label
id="counter" style="font-size:36px"></label>
</td>
</tr>
<tr>
<td colspan="6" style="margin-left: 100px; text-align: center;"align="right">
<input type="hidden" name="bId" value="">
<input type="button" value="下單" class="btn_next" onclick="genernateOrder()" />
</td>
</tr>
</table>
</div>
由於servlet處是將購物車裏的數據存放在了一個map<food,integer>中因此在前端使用c標籤取food具體信息的時候 需要加上key.屬性
(其實將信息存儲到set中是比較合理的 因爲set是無序不重複 可去重 使用map的話 在servlet頁面寫去重邏輯會稍稍有些複雜 不過也可以通過重寫equals和hashcode方法實現)
其次這裏前端頁面還用到了c標籤裏的set屬性 主要是爲了計算最後總價 是比較方便的了