實現簡易購物車

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;">&yen;&nbsp;${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屬性 主要是爲了計算最後總價 是比較方便的了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章