黑马商城项目(三)之一
来源:互联网 发布:linux fm驱动 编辑:程序博客网 时间:2024/06/08 04:47
黑马商城项目(三)
- 黑马商城项目三
- 购物车模块
- 添加到购物车
- 购物车的javabean
- 清空购物车
- 从购物车移除一个商品
- 添加到购物车
- 购物车模块
购物车模块
添加到购物车
在单个商品详情页面有如下表单:
<form method="post" action="${pageContext.request.contextPath}/cart"><input type="hidden" name="pid" value="${p.pid}"><input type="hidden" name="method" value="addCart"><input ... value="加入购物车" type="submit"></form>
用户点击加入购物车按钮后,表单提交到CartServlet中的addCart()方法 (注意商品pid和方法名称都需要通过定义隐藏域的方式进行提交)。
CartServlet中的addCart()方法:
// 对购物车添加购物项 public String addCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { //获取参数 String pid = request.getParameter("pid"); int count = Integer.parseInt(request.getParameter("count")); // 根据商品pid获取对应的商品对象 ProductService ps =(ProductService)FactoryDemo.getBean("ProductService"); Product product = ps.findBypid(pid); // 创建一个购物项对象 CartItem item = new CartItem(); item.setCount(count); item.setProduct(product); // 创建一个购物车对象 (唯一) Cart cart = getCart(request); // 把购物项放在购物车中 cart.add(item); // 重定向到cart.jsp response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp"); } catch (Exception e) { } return null; }
注意:向购物车中添加购物项,需要保证购物车对象是唯一的,实现唯一的方法是在Servlet中定义一个getCart()方法:
public Cart getCart(HttpServletRequest request){ //获取session对象 HttpSession session = request.getSession(); //从session中获取cart对象 Cart cart = (Cart)session.getAttribute("cart"); //如果session中没有,则new一个实例出来赋给cart并存到session中 if(cart==null){ cart = new Cart(); session.setAttribute("cart",cart); } //返回唯一的一个cart对象 return cart; }
购物车的javabean:
public class Cart implements Serializable{ // 商品的总金额 private double total; // 购物项的集合 Map<String,CartItem> map=new LinkedHashMap<String,CartItem>(); // 添加购物项--- 总金额=总金额+购物项的小计 public void add(CartItem item) { /* 注意下面,购物项的id直接使用了商品的pid,因为都是唯一的。 */ CartItem _item = map.get(item.getProduct().getPid()); // 判断map里面有没有 if(_item==null) { // 没有 map直接添加 修改总金额=总金额+添加商品的小计 map.put(item.getProduct().getPid(),item); total=total+item.getSubtotal(); }else { // 有 把数量累加了=小计自动变化 修改总金额=总金额+添加商品的小计 _item.setCount(_item.getCount()+item.getCount()); total=total+item.getSubtotal(); } } // 删除购物项--- 总金额=总金额-被删除的购物项小计 public void remove(String key) { // 删除购物项 CartItem item = map.remove(key); // 总金额=总结额-被删除购物项的小计 total=total-item.getSubtotal(); } // 清空购物项--- 总金额=0 public void removeAll() { // 清空购物车 map.clear(); // 总金额为0 total=0; }}//购物项的 javabean: // 商品的对象 private Product product; // 商品数量 private int count; // 商品小计 private double subtotal;
注意:购物车中定义了购物项的Map集合(还有购物车的总金额),而购物项中又定义了商品对象(还有该商品的数量和小计)。用图片来理解设计思路:
清空购物车
Cart cart = getCart(request); cart.removeAll(); // 重定向到cart.jsp response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
从购物车移除一个商品
String key = request.getParameter("id"); Cart cart = getCart(request); cart.remove(key); // 重定向到cart.jsp response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
阅读全文
0 0
- 黑马商城项目(三)之一
- 黑马商城项目(三)之二
- 黑马商城项目(二)
- 黑马商城项目(四)
- 黑马商城项目_商城主页底部导航
- 黑马商城项目_商城分类页_左侧滑动
- 黑马商城项目_商城购物车页面
- 黑马商城项目_商城主页_zepto应用
- 黑马商城项目_banner动画效果
- 黑马商城项目_导航部分
- 黑马商城项目_banner样式设计
- 黑马商城项目_商品展示结构设计
- 商城项目(一)
- 商城项目总结(一)
- 商城项目总结(二)
- 商城----项目宏观(1)
- 黑马商城项目_制作导航条的圆点
- 黑马商城项目_导航条圆点的定位
- spring AOP---【小白系列】0基础到熟练应用spring框架(三)
- 洛谷P1008 三连击
- hdu5701中位数计数(百度之星)
- 考试排名
- Java集合总结(二)
- 黑马商城项目(三)之一
- 伪类
- 3838. 【NOIP2014模拟9.14】Super Big Stupid Cross
- 从控制台输入字符 统计该字符"e"所出现的个数
- COCI 2010/2011 6th round--ABECEDA【拓扑排序】【字符串处理】
- C++基础-类与对象
- as3实现XML中特殊字符的转义还原
- UART寄存器详解
- 第一篇博客