淘淘商城系列——删除购物车商品及购物车总结

来源:互联网 发布:js 数组 按50为一批 编辑:程序博客网 时间:2024/04/30 08:05

删除购物车商品

通过上文的学习,想必大家都已实现修改购物车商品数量的这个功能,本文我将带领大家一起实现删除购物车商品的功能。
我们在购物车列表页面点击”删除”链接,如下图所示。
这里写图片描述
我们会看到如下图所示界面,可以看到请求的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为准。

以上就是解决方案,感兴趣的同学可以自己实现一下。

阅读全文
0 0
原创粉丝点击