上文我们一起改造了下商品详情页面关于购物车那块的部分,本文我们将一起实现添加购物车这个功能。
我们以京东为例,比如我们选了一款手机,然后点击”加入购物车”,注意,此时我们并没有登录。

我们会看到如下图所示界面,可以看到,我们并没有直接进入购物车列表,而是到了一个中间页面,只是提醒我们成功加入了购物车。如果想进购物车列表的话,就点击那个”去购物车结算”按钮。

我们模仿京东的购物车功能,既然要展示成功加入购物车的页面,我们就要先把下图所示的淘淘商城购物车工程静态资源文件添加到taotao-cart-web工程当中。

记得将css、js、images放到webapp目录下,将jsp目录放到WEB-INF目录下,如下图所示。

下面我们再看下我们的商品详情页面以及添加购物车的情况,我们首先要启动所有的服务,然后启动除了taotao-cart-web工程之外的所有工程,商品详情页面如下图所示。

我们点击上图的”加入购物车”,会看到如下图所示界面,可以看到加入购物车的请求当中包含了商品ID以及商品数量。我们可以根据商品ID查询出商品详情。

下面我们来完成添加购物车的功能,由于查询商品详情我们的taotao-manager服务已经实现过了,因此我们只需完成表现层工程即可。首先我们要添加对dubbo服务的引用,即在springmvc.xml配置文件中添加如下配置:

<dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />
  • 1


接着我们在taotao-cart-web工程中按照如下业务逻辑编写一个Controller——CartController.java:

  1. 从cookie中查询商品列表。
  2. 判断商品在商品列表中是否存在。
  3. 如果存在,商品数量相加。
  4. 不存在,根据商品id查询商品信息。当根据商品id查询出商品信息后,取第一张图片保存到image属性中即可。
  5. 把商品添加到购物车列表。
  6. 把购物车商品列表写入cookie。
    • key:TT_CART
    • value:购物车列表转换成json数据,并且需要对数据进行编码
    • cookie的有效期:保存7天

如下图所示,在CartController类中处理逻辑并最终返回逻辑视图。

为了方便大家复制,现将CartController类的代码贴出。

/*** 购物车管理Controller* <p>Title: CartController</p>* <p>Description: </p>* <p>Company: www.itcast.cn</p> * @version 1.0*/
@Controller
public class CartController {@Autowiredprivate ItemService itemService;@Value("${COOKIE_TT_CART}")private String COOKIE_TT_CART;@Value("${COOKIE_CART_EXPIRE}")private Integer COOKIE_CART_EXPIRE;@RequestMapping("/cart/add/{itemId}")public String addCart(@PathVariable Long itemId, Integer num, HttpServletRequest request, HttpServletResponse response) {// 先从Cookie中查询购物车列表List<TbItem> cartList = getCartList(request);// 判断购物车列表中是否有此商品boolean flag = false;for (TbItem tbItem : cartList) {/** 由于tbItem的ID与参数中的itemId都是包装类型的Long,要比较是否相等不要用==,* 因为那样比较的是对象的地址而不是值,为了让它们比较的是值,那么可以使用.longValue来获取值 */if (tbItem.getId() == itemId.longValue()) {// 购物车列表中存在此商品,数量要相加// 如果有,则商品数量相加tbItem.setNum(tbItem.getNum() + num); // 可以用商品的库存字段来作为购物车商品数量flag = true;break;}}if (!flag) {// 如果没有,则根据商品id查询商品信息,调用商品服务实现TbItem tbItem = itemService.getItemById(itemId);// 设置商品数量tbItem.setNum(num);// 取一张图片String image = tbItem.getImage();if (StringUtils.isNotBlank(image)) {tbItem.setImage(image.split(",")[0]);}// 添加到商品列表cartList.add(tbItem);}// 把这个购物车写入CookieCookieUtils.setCookie(request, response, COOKIE_TT_CART, JsonUtils.objectToJson(cartList), COOKIE_CART_EXPIRE, true);// 返回添加成功页面return "cartSuccess";}// 从Cookie中取出购物车列表private List<TbItem> getCartList(HttpServletRequest request) {// 使用CookieUtils取购物车列表String json = CookieUtils.getCookieValue(request, COOKIE_TT_CART, true);// 判断Cookie中是否有值if (StringUtils.isBlank(json)) {// 没有值就返回一个空Listreturn new ArrayList();}// 把json转换成List对象List<TbItem> list = JsonUtils.jsonToList(json, TbItem.class);return list;}
}

CartController类的代码中用到了常量,常量我们都放到了配置文件当中,如下图所示。

下面我们来测试一下,我们启动taotao-cart-web工程,taotao-cart-web工程启动成功后,我们再到商品详情页面点击”加入购物车”,可以看到如下图所示界面,可以看到正常显示了”成功添加商品到购物车”的页面。

淘淘商城——添加购物车相关推荐

  1. Selenium 实现淘宝自动化添加购物车

    1.先连接webview,可以打开浏览器 使用的是火狐浏览器Firefox() from selenium import webdriver import time driver = webdrive ...

  2. 淘宝/天猫 添加购物车API接口教程

    buyer_cart_add-添加到购物车 onebound.taobao.buyer_cart_add    API接口工具 该接口需要使用:num_iid.sku_id.token三项数据 使用流 ...

  3. 淘淘商城——展示购物车商品列表

    通过上文的学习,想必大家都已经实现了添加购物车的功能,本文我们将一起实现展示购物车商品列表的功能. 我们访问淘淘商城首页(前提是启动了所有的服务及工程,虽然有个别工程用不上,不过也没关系),点击&qu ...

  4. 淘淘商城第106讲——改造商品详情页面中的加入购物车板块

    在上一讲中,我就说过,关于购物车模块,之前的京东和淘宝并不一样,之前的京东允许用户在没有登录的情况下就添加商品进购物车,而且加到购物车里面的商品可以一直保存着.其实这是将购物车信息写入到了Cookie ...

  5. (转)淘淘商城系列——实现添加商品功能

    http://blog.csdn.net/yerenyuan_pku/article/details/72810937 经过上文的学习,我相信大家都知道富文本编辑器的使用方法了,我们能走到这步,实属不 ...

  6. 黑马淘淘商城第十二天 购物车实现、订单确认页面展示

    1. 课程计划 第十二天: 1.购物车实现 2.订单确认页面展示 2. 购物车的实现 2.1. 功能分析 1.购物车是一个独立的表现层工程. 2.添加购物车不要求登录.可以指定购买商品的数量. 3.展 ...

  7. 淘淘商城之商品添加功能实现

    1.功能分析 将表单中的数据提交到服务器中,查看item-add.jsp文件,核心表单如下: <div style="padding:10px 10px 10px 10px" ...

  8. 学习淘淘商城第二十三课(添加商品的实现)

    上节课我们一起学习了富文本编辑器的使用,这节课我们一起学习下商品添加的实现. 在item-add.jsp当中,当点击提交按钮后,会触发submitForm方法,如下图所示. 在提交表单前需要校验输入的 ...

  9. 购物车的实现——淘淘商城(二十六)

    文章目录 购物车的实现方式 cookie session 结合数据库 参考 添加购物车 需求 分析 总结 Service层 Controller层 展示购物车 需求 分析 总结 Service层 Co ...

最新文章

  1. 【转】JavaScript事件顺序
  2. pom文件报错_解决mac下tess4j文字识别报错问题
  3. session,cookie和token,以及负载均衡
  4. flask框架+pygal+sqlit3搭建图形化业务数据分析平台
  5. java计算机毕业设计辅导员班级量化管理系统MyBatis+系统+LW文档+源码+调试部署
  6. [WeChart]微信小程序抓包步骤
  7. 微信内置浏览器不能下载应用文件的解决方案-微信跳转手机默认浏览器
  8. 服务器raid5数据恢复成功案例,磁盘阵列数据恢复方法
  9. css中margin和padding设置成百分比时参照物是谁
  10. ImportError: CuPy is not correctly installed解决方法
  11. 判断两个圆相切或相交
  12. 微信公众号支付从前端到后台(小白教程)
  13. 做B端产品经理好还是做C端产品经理好?
  14. Mybatis中用到的设计模式
  15. 特别好用的git动图制作软件
  16. MLP Coursework Machine Learning Practical
  17. B. Tournament
  18. 生命不息,折腾不止:Jetson Nano填坑之软件篇
  19. 神经网络参数量和计算量,神经网络是参数模型吗
  20. 【数学物理方法】定解问题——数物方程的导出(列泛定方程)

热门文章

  1. 为 Ubuntu22.04 系统添加中文输入法
  2. 向量点乘公式推导和几何解释
  3. java开发中常用的Git命令详解
  4. centos gedit 字体大小_干货 | SolidWorks工程图尺寸标注字体大小更改方法
  5. SQL语句 把某个字段中的部分值改为*号和替换部门字符串
  6. 波段炒股看什么指标最准,怎么才能把股票波段做好?
  7. MFC 窗口自适应分辨率
  8. Oracle恢复一例--ORA-03113、ORA-24324,ORA-01041错误
  9. kali linux开启SSH连接
  10. SQL中decode函数的用法