1. 程式人生 > >淘淘商城系列——刪除購物車商品及購物車總結

淘淘商城系列——刪除購物車商品及購物車總結

刪除購物車商品

通過上文的學習,想必大家都已實現修改購物車商品數量的這個功能,本文我將帶領大家一起實現刪除購物車商品的功能。
我們在購物車列表頁面點選”刪除”連結,如下圖所示。
這裡寫圖片描述
我們會看到如下圖所示介面,可以看到請求的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的方式實現的,這樣做的優點有以下兩點:

  1. 實現簡單
  2. 不需要佔用服務端儲存空間

缺點也很明顯,主要有以下兩點:

  1. 儲存容量有限(Cookie中儲存的資料量畢竟是比較有限的)
  2. 更換裝置後,購物車資訊不能同步

那麼針對上面的缺點,我們應該怎樣解決呢?這裡給大家提供一下思路:

  1. 要求使用者登入。
  2. 把購物車商品列表儲存到資料庫中。推薦使用Redis。
  3. 如果存到Redis的話,key最好用使用者的ID,value便是購物車中商品列表。在Redis中儲存有五種儲存方式,我們比較適合使用hash方式,規定一個hash,然後key是商品ID,value是商品基本資訊。這樣做的好處是儲存的內容不是很長,效率比較高。
  4. 在使用者未登入的情況下寫入cookie當中,當用戶登入後,訪問購物車列表時
    • a) 把cookie中的資料同步到Redis
    • b) 把cookie中的資料刪除
    • c) 展示購物車列表時以Redis為準
    • d) 如果Redis中有資料cookie中也有資料,那麼需要做資料合併,即相同商品數量相加,不同商品新增一個新商品
  5. 如果使用者是登入狀態,展示購物車列表時以Redis為準。如果未登入,以cookie為準。

以上就是解決方案,感興趣的同學可以自己實現一下。