淘淘商城系列——刪除購物車商品及購物車總結
阿新 • • 發佈:2019-02-09
刪除購物車商品
通過上文的學習,想必大家都已實現修改購物車商品數量的這個功能,本文我將帶領大家一起實現刪除購物車商品的功能。
我們在購物車列表頁面點選”刪除”連結,如下圖所示。
我們會看到如下圖所示介面,可以看到請求的url是/cart/delete/{itemId}.html,與購物車列表頁面的url地址/cart/cart.html不一致,但是我們點選”刪除”連結後頁面應該仍然留在當前頁面,我們怎麼做呢?我們可以在Controller類的方法中指定/cart/delete/{itemId}的請求,處理完邏輯後重定向到我們的購物車列表頁面,這樣就好像頁面一直在當前頁面一樣的效果。
我們來編寫Controller層程式碼,如下圖所示。
為方便大家複製,現將新新增的deleteCartItem方法的程式碼貼出。
@RequestMapping("/cart/delete/{itemId}")
public String deleteCartItem(@PathVariable Long itemId,
HttpServletRequest request, HttpServletResponse response) {
// 取購物車商品列表
List<TbItem> cartList = getCartList(request);
// 找到對應的商品
for (TbItem tbItem : cartList) {
if (tbItem.getId().longValue() == itemId) {
// 刪除商品
cartList.remove(tbItem);
// 退出迴圈
break;
}
}
// 寫入Cookie
CookieUtils.setCookie(request, response, COOKIE_TT_CART,
JsonUtils.objectToJson(cartList), COOKIE_CART_EXPIRE, true);
// 返回邏輯檢視,需要做redirect跳轉
return "redirect:/cart/cart.html";
}
下面我們便重啟taotao-cart-web工程,重啟成功後,我們點選購物車列表頁面的”刪除”連結,可以看到如下圖所示結果,說明購物車中的該商品已經被刪除掉了。至於庫存還顯示1件以及全選、刪除選中的商品、繼續購物我們都沒有實現,有興趣的同學可以自己去實現,我們做到目前這種情況就行了。
購物車總結
我們當前實現的購物車是以Cookie的方式實現的,這樣做的優點有以下兩點:
- 實現簡單
- 不需要佔用服務端儲存空間
缺點也很明顯,主要有以下兩點:
- 儲存容量有限(Cookie中儲存的資料量畢竟是比較有限的)
- 更換裝置後,購物車資訊不能同步
那麼針對上面的缺點,我們應該怎樣解決呢?這裡給大家提供一下思路:
- 要求使用者登入。
- 把購物車商品列表儲存到資料庫中。推薦使用Redis。
- 如果存到Redis的話,key最好用使用者的ID,value便是購物車中商品列表。在Redis中儲存有五種儲存方式,我們比較適合使用hash方式,規定一個hash,然後key是商品ID,value是商品基本資訊。這樣做的好處是儲存的內容不是很長,效率比較高。
- 在使用者未登入的情況下寫入cookie當中,當用戶登入後,訪問購物車列表時
- a) 把cookie中的資料同步到Redis
- b) 把cookie中的資料刪除
- c) 展示購物車列表時以Redis為準
- d) 如果Redis中有資料cookie中也有資料,那麼需要做資料合併,即相同商品數量相加,不同商品新增一個新商品
- 如果使用者是登入狀態,展示購物車列表時以Redis為準。如果未登入,以cookie為準。
以上就是解決方案,感興趣的同學可以自己實現一下。