当前位置: 代码迷 >> 综合 >> java_web 快速入门之第十三章 购物车案例
  详细解决方案

java_web 快速入门之第十三章 购物车案例

热度:47   发布时间:2023-12-05 09:24:24.0

     俗话说得好,开头万事难,对于购物车来说,有很多种方法技术可以实现,我们新人就从简单的的实现方法做起,不积跬步无以至千里,不积小流无以成江河。

    先从简单的------以临时存储数据的session购物车为例

  • 购物车主界面----门户

<%@page import="com.zking.goods.entity.Goods"%>
<%@page import="java.util.List"%>
<%@page import="com.zking.goods.biz.impl.GoodsBizImpl"%>
<%@page import="com.zking.goods.biz.IGoodsBiz"%>
<%@page import="com.zking.goods.entity.Users"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>红旗牌购物商场</title>
</head>
<body><h3>红旗牌购物商场</h3><%Users u = (Users) session.getAttribute("users");%>用户:<%=u.getCname()%><table border="1" width="70%"><tr><th>编号</th><th>名称</th><th>价格</th><th>描述</th><th>图片</th><th>操作</th></tr><%//调用biz层显示所有的数据IGoodsBiz igb = new GoodsBizImpl();//调用查询所有的方法List<Goods> listGoods = igb.queryGoodsAll();for (Goods goods : listGoods) {%><tr><td><%=goods.getGid()%></td><td><%=goods.getGname()%></td><td><%=goods.getGprice()%></td><td><%=goods.getGinfo()%></td><td><img src="<%=goods.getGpath()%>" /></td><td><button onclick="addCart(<%=goods.getGid()%>)">加入购物车</button></td></tr><%}%></table><script type="text/javascript">//加入购物车的点击事件function addCart(cid){location.href = "doShopping.jsp?cid="+cid;}</script></body>
</html>

 

  • 购物车模块------重点

<%@page import="java.util.List"%>
<%@page import="com.zking.goods.entity.Cart"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h2>我的购物车</h2><a href = "index.jsp">返回首页</a><hr/><table border ="1" width = "70%"><tr><th>编号</th><th>名称</th><th>价格</th><th>图片</th><th>数量</th><th>总价格</th><th>操作</th></tr><%//获取购物车//Cart cart = (Cart)session.getAttribute("cart");List<Cart> listCarts = (List<Cart>)session.getAttribute("listCarts");for(Cart cart : listCarts){%><tr id = "<%=cart.getGoods().getGid()%>"><td><%=cart.getGoods().getGid() %></td><td><%=cart.getGoods().getGname() %></td><td><%=cart.getGoods().getGprice() %></td><td><img src = "<%=cart.getGoods().getGpath() %>"/></td><td><button onclick="add('a',<%=cart.getGoods().getGid()%>)">-</button><input type = "text" style ="width:40px" value = "<%=cart.getCcount() %>"/><button onclick="add('b',<%=cart.getGoods().getGid()%>)">+</button></td><td><%=cart.getCtotal() %></td><td><button onclick="delCart(<%=cart.getGoods().getGid()%>)">删除</button><button onclick="updateCart(<%=cart.getGoods().getGid()%>)">修改</button></td></tr><%		}%></table></body>
</html>

  • 加入购物车的do处理页面-----doShopping.jsp

       加入购物车的方法一:点击一个就加入一个

?session.setAttribute("cart", cart);response.sendRedirect("cart.jsp"); ?

      加入购物车的版本方法二:

   List<Cart> listCarts = new ArrayList<Cart>();listCarts.add(cart);session.setAttribute("listCarts", listCarts);response.sendRedirect("cart.jsp"); 

     方法一和方法二存在问题:---------只能存储一个商品,后面点击加入购物车的会覆盖前面加入购物车的商品

       加入购物车的方法三:将商品加入购物车之前,先要获取购物车

         //1.获取购物车session.getAttribute("listCarts"); 如果不存在  结果:nullList<Cart> listCarts = (List<Cart> )session.getAttribute("listCarts");//2.判断---如果购物车为null   则创建一个购物车if(listCarts == null){//创建一个购物车容器listCarts = new ArrayList<Cart>();}listCarts.add(cart);session.setAttribute("listCarts", listCarts);response.sendRedirect("cart.jsp"); 

       方法三存在问题:--------相同的商品会另起一行,不符合事实生活

       正确方法------方案四

?//1.获取购物车List<Cart> listCarts = (List<Cart> )session.getAttribute("listCarts");//2.判断非空boolean flag = true;if(null == listCarts){//说明用户时第一次将商品加入购物车  //创建购物车listCarts = new ArrayList<Cart>();}else{//否则  购物车中存在商品//遍历所有的购物车中的商品  看该购物车中是否存在刚才点击的cart实体封装for(Cart c : listCarts){//判断传递的cid与当前listCarts中的每一个cid进行匹配if(cid == c.getGoods().getGid()){//说明购物车中存在该商品flag = false;//修改数量c.setCcount(c.getCcount()+1);//修改总价格c.setCtotal();}}}//判断flag标记if(flag == true){//说明购物车中没有该商品listCarts.add(cart);}//重新保存购物车session.setAttribute("listCarts", listCarts);response.sendRedirect("cart.jsp");?

   注意:加入购物车 不是将Goods进行存储  而是存储的是Cart实体

  购物车删除的do界面

<%@page import="java.util.Iterator"%>
<%@page import="com.zking.goods.entity.Cart"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%String id = request.getParameter("gid");int cid = 0;if(null!=id){cid = Integer.valueOf(id);}//获取购物车List<Cart> listCarts = (List<Cart>)session.getAttribute("listCarts");//迭代器的方式进行删除Iterator<Cart> its = listCarts.iterator();while(its.hasNext()){Cart cc = its.next();//its.remove();if(cc.getGoods().getGid() == cid){its.remove();}}session.setAttribute("listCarts", listCarts);response.sendRedirect("cart.jsp");%>

     购物车修改的do界面

<%@page import="com.zking.goods.entity.Cart"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%String id1 = request.getParameter("gid");String id2 = request.getParameter("ccount");int gid = 0;if(id1!=null){gid = Integer.valueOf(id1);}int ccount = 0;if(id2!=null){ccount = Integer.valueOf(id2);}//获取购物车List<Cart> listCarts = (List<Cart> )session.getAttribute("listCarts");for(Cart c:listCarts){if(c.getGoods().getGid() == gid){c.setCcount(ccount);c.setCtotal();}}session.setAttribute("listCarts", listCarts);response.sendRedirect("cart.jsp");%>

             敲键盘百遍,其义自现