添加购物车功能


        我们以京东为例,比如我们选了一款手机,然后点击"加入购物车",注意,此时我们并没有登录。


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


          

          我们模仿京东的购物车功能,既然要展示成功加入购物车页面,我们就要先把相关静态资源文件添加到taotao-cart-web工程当中,大家可以到:http://download.csdn.net/detail/u012453843/9869684这个地址下载关于淘淘商城购物车工程静态资源文件,解压后将css、images、js复制粘贴到taotao-cart-web工程的webapp目录下,把jsp粘贴到webapp目录下的WEB-INF目录下。如下图所示。


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


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


           下面我们来完成添加购物车的功能,由于查询商品详情我们的taotao-manager服务已经实现过了,因此我们只需完成web工程即可。我们在taotao-cart-web工程中添加一个Controller,如下图所示,在Controller中处理逻辑并最终返回逻辑视图。


        CartController代码如下:

[html]  view plain  copy
  1. package com.taotao.cart.controller;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. import org.apache.commons.lang3.StringUtils;  
  10. import org.springframework.beans.factory.annotation.Autowired;  
  11. import org.springframework.beans.factory.annotation.Value;  
  12. import org.springframework.stereotype.Controller;  
  13. import org.springframework.web.bind.annotation.PathVariable;  
  14. import org.springframework.web.bind.annotation.RequestMapping;  
  15. import org.springframework.web.bind.annotation.RequestParam;  
  16.   
  17. import com.alibaba.fastjson.JSON;  
  18. import com.taotao.common.utils.CookieUtils;  
  19. import com.taotao.pojo.TbItem;  
  20. import com.taotao.service.ItemService;  
  21.   
  22. @Controller  
  23. public class CartController {  
  24.     @Autowired  
  25.     private ItemService itemService;  
  26.       
  27.     @Value("${CART_KEY}")  
  28.     private String CART_KEY;  
  29.     @Value("${CART_EXPIRE}")  
  30.     private Integer CART_EXPIRE;  
  31.       
  32.     @RequestMapping("/cart/add/{itemId}")  
  33.     public String addItemCart(@PathVariable Long itemId,@RequestParam(defaultValue="1") Integer num,  
  34.             HttpServletRequest request,HttpServletResponse response){  
  35.         //取购物车商品列表  
  36.         List<TbItem> cartItemList = getCartItemList(request);  
  37.         //判断商品在购物车中是否存在  
  38.         boolean flag = false;  
  39.         for(TbItem tbItem : cartItemList){  
  40.             //由于tbItem的ID与参数中的itemId都是包装类型的Long,要比较是否相等不要用==,因为那样比较  
  41.             //的是对象的地址而不是值,为了让它们比较的是值,那么可以使用.longValue来获取值  
  42.             if(tbItem.getId() == itemId.longValue()){  
  43.                 //如果存在数量相加  
  44.                 tbItem.setNum(tbItem.getNum() + num);  
  45.                 flag = true;  
  46.                 break;  
  47.             }  
  48.         }  
  49.         //如果不存在,添加一个新的商品  
  50.         if(!flag){  
  51.             //需要调用服务取商品信息  
  52.             TbItem tbItem = itemService.getItemById(itemId);  
  53.             //设置购买的商品数量  
  54.             tbItem.setNum(num);  
  55.             //取一张图片  
  56.             String image = tbItem.getImage();  
  57.             if(!StringUtils.isBlank(image)){  
  58.                 String[] images = image.split(",");  
  59.                 tbItem.setImage(images[0]);  
  60.             }  
  61.             //把商品添加到购物车  
  62.             cartItemList.add(tbItem);  
  63.         }  
  64.         //把购物车列表写入cookie  
  65.         CookieUtils.setCookie(request, response, CART_KEY, JSON.toJSONString(cartItemList),  
  66.                 CART_EXPIRE, true);  
  67.         //返回添加成功页面  
  68.         return "cartSuccess";  
  69.     }  
  70.       
  71.     private List<TbItem> getCartItemList(HttpServletRequest request){  
  72.         //从cookie中取购物车商品列表  
  73.         String json = CookieUtils.getCookieValue(request, CART_KEY, true);//为了防止乱码,统一下编码格式  
  74.         if(StringUtils.isBlank(json)){  
  75.             //说明cookie中没有商品列表,那么就返回一个空的列表  
  76.             return new ArrayList<TbItem>();  
  77.         }  
  78.         List<TbItem> list = JSON.parseArray(json, TbItem.class);  
  79.         return list;  
  80.     }  
  81. }  
         其中用到了常量,常量我们都放到配置文件当中,如下图所示。

         配置文件中的内容如下:

[html]  view plain  copy
  1. #购物车在cookie中保存的key  
  2. CART_KEY=TT_CART  
  3. #购物车商品的有效期,默认为7天  
  4. CART_EXPIRE=604800  
         下面我们来测试一下,我们启动taotao-cart-web,如下图所示。

         在弹出的对话框中的Goals一栏加入"clean tomcat7:run",然后点击"Apply",然后点击"Run"


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值