淘淘商城27_購物車_02_展示購物車資訊/商品數量修改/刪除
阿新 • • 發佈:2019-01-02
一、展示購物車資訊
1.Controller
/** * 展示購物車資訊 * @param request * @param response * @param model * @return */ @RequestMapping("/cart/cart") public String showCart(HttpServletRequest request, HttpServletResponse response, Model model){ List<TbItem> list = getCartList(request, response); model.addAttribute("cartList", list); return "cart"; }
2. cart.jsp
3. cartSuccess.jsp
4. 測試
5. 除錯bug
如圖所示,如果我們一直重新整理的話,去購物車結算時,商品數量變多了
解決辦法:通過redirect方式跳轉,就不會一直重新整理數量了
在新增購物車成功時不讓它直接跳轉到成功頁面(cartSuccess.jsp),而是經過一下跳轉即可
二、修改購物車商品數量
1.
2.Controller
/** * 修改購物車中商品數量 * @param itemId * @param num * @param request * @param response * @return */ @RequestMapping("/cart/update/num/{itemId}/{num}") @ResponseBody public TaotaoResult updateCartItemNum(@PathVariable Long itemId, @PathVariable Integer num, HttpServletRequest request, HttpServletResponse response){ //1.從cookie中查詢出購物車 List<TbItem> list = getCartList(request, response); //2.遍歷購物車 for (TbItem tbItem : list) { if (tbItem.getId()==itemId.longValue()) {//購物車中的商品id與前端傳過來的商品id相同 tbItem.setNum(num);//3.修改購物車中商品數量 list.add(tbItem);//將商品新增到購物車中 break; } } //4.將購物車儲存到cookie中,設定生命週期,通常是7天,按秒算 CookieUtils.setCookie(request, response, TT_CART, JsonUtils.objectToJson(list), COOKIE_CART_EXPIRE); return TaotaoResult.ok(); }
三、刪除購物車
1. cart.jsp
2. Controller
/** * 刪除購物車商品 * @param itemId * @param request * @param response * @return */ @RequestMapping("/cart/delete/{itemId}") @ResponseBody public String deleteCartItem(@PathVariable Long itemId, HttpServletRequest request, HttpServletResponse response){ //1.從cookie中查詢出購物車 List<TbItem> list = getCartList(request, response); //2.遍歷購物車 for (TbItem tbItem : list) { if (tbItem.getId()==itemId.longValue()) {//購物車中的商品id與前端傳過來的商品id相同 list.remove(tbItem);//刪除購物車中商品 break; } } //4.將購物車儲存到cookie中,設定生命週期,通常是7天,按秒算 CookieUtils.setCookie(request, response, TT_CART, JsonUtils.objectToJson(list), COOKIE_CART_EXPIRE); return "redirect:/cart/cart.html"; }
3. 測試
四、購物車總結
購物車很複雜,但是因為我們時間有限,所以只是簡單的用cookie實現了一下。
但是在實際應用中,購物車很複雜,就拿京東來說,購物車會涉及到滿減(比如:滿500減99等)、京豆(比如:500京豆可以抵30元),這樣如果使用者買了許多商品,付款後,突然有一,兩件商品覺得不好,要退款,這裡就麻煩了,是退全部的錢,還是隻退優惠後的錢,等等,這裡涉及到的邏輯就夠複雜的。
其實淘寶就是一套很好的業務邏輯,他們在使用者未登陸之前是不能將商品新增到購物車中的,這是商品是新增到cookie中的,在使用者登入成功以後,會將商品儲存到redis中。
- 在使用者未登入情況下寫cookie。當用戶登入後,訪問購物車列表時,
- 把cookie中的資料同步到redis。
- 把cookie中的資料刪除
- 展示購物車列表時以redis為準。
- 如果redis中有資料cookie中也有資料,需要做資料合併。相同商品數量相加,不同商品新增一個新商品。
- 如果使用者登入狀態,展示購物車列表以redis為準。如果未登入,以cookie為準。