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

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

    先从简单的------以临时存储数据的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"); 如果不存在  结果:null
		   List<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");
	%>
	
	
	

             敲键盘百遍,其义自现

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值