目录
session实现购物车
1.首页布局
对商城首页进行排版
商品会有加入购物车功能会传递商品id
<%@page import="com.ys.cart.entity.Goods"%>
<%@page import="com.ys.cart.biz.impl.GoodsBizImpl"%>
<%@page import="com.ys.cart.biz.IGoodsBiz"%>
<%@page import="com.ys.cart.entity.Users"%>
<%@page import="java.util.List"%>
<%@ 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>
<!-- 通过session默认保存一个用户 -->
<%
request.setCharacterEncoding("utf-8");
//获取usernmae
String username = request.getParameter("username");
if(null!=username){
out.println("<span>欢迎你回来! "+username+"</span>");
}else{
out.println("【<a href = 'login.jsp'>登录</a>】");
}
%>
<%
Users users = new Users(1, "ys", "123", "男", 1, 1000, "date");
//存储到session
session.setAttribute("users", users);
%>
<h3>ys购物商城首页</h3>
<%
Users u = (Users) session.getAttribute("users");
%>
<p>
欢迎您!<%=u.getUsername()%></p>
<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(gid){
//alert(cid)
location.href = "doShopping.jsp?gid="+gid;
}
</script>
</body>
</html>
2.点击加入购物车跳转到do处理页面
拿到传递的商品id可以拿到商品所有信息,
加入购物车默认为一件商品,
创建list集合成为购物车(首次肯定为空会进行判断)
不为空时会进行判断是否存在相同的商品(存在时商品数量+1,就不用添加到购物车)
否则将商品添加到购物车实体,保存在session中的list集合
<%@page import="com.ys.cart.entity.Cart"%>
<%@page import="com.ys.cart.entity.Goods"%>
<%@page import="com.ys.cart.biz.impl.GoodsBizImpl"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 加入购物车的do处理页面 -->
<!--
购物车流程:
1.Goods---显示商品信息
2.Cart ---购物车中的信息
加入购物车 不是将Goods进行存储 而是存储的是Cart实体
-->
<%
//将点击的商品存储到购物车容器中(session)
//设置编码
request.setCharacterEncoding("utf-8");
//获取商品编号
String id = request.getParameter("gid");
int gid = 0;
if (null != id) {
gid = Integer.valueOf(id);
}
//拿到cid 根据cid获取商品的其它信息
Goods goods = new GoodsBizImpl().getGoodsByCid(gid);
//数量默认一件
//总价格 商品的单价 * 数量(1件)
//将上面获取的信息封装到Cart实体中
Cart cart = new Cart();
cart.setGoods(goods);
cart.setCcount(1);
cart.setCtotal();
//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 (gid == 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");
%>
3.进行一个购物车布局,实现购物车相关功能
拿到购物车进行一个布局(要求每页显示五个商品,会有删除,修改功能)
定义页码和每页个数,总数量(求出总页数)。
调用伪分页的方法 subList(start,end);
listCarts = listCarts.subList(start, end);在尾部有关当前页数的代码,相关超链接需要带有部分逻辑代码和参数
当前页数(第一页,总页数)
首页(第一页,模糊查询关键词)
上一页(当前页数-1并且判断是否符合逻辑,模糊查询关键词)
下一页(当前页数+1并且判断是否符合逻辑,模糊查询关键词)
末页(最后一页,模糊查询关键词)
当点击时跳转到主页面,需要接收参数,进行一个逻辑判断。
<%@page import="com.ys.cart.entity.Cart"%>
<%@page import="java.util.List"%>
<%@ 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>
<%
//获取购物车
List<Cart> listCarts = (List<Cart>) session.getAttribute("listCarts");
//定义一个页码
int pageIndex = 1;
//定义一个变量存储每页显示的条数
int pageSize = 5;
//当用户点击了下一页 获取到下一页超链接上的参数
String pIndex = request.getParameter("pageIndex");
if (pIndex != null) {
pageIndex = Integer.valueOf(pIndex);
}
//定义一个变量存储总记录数
int pageCount = listCarts.size();
int start = (pageIndex - 1) * pageSize;
//sublist 参数end 没有等于
int end = pageIndex * pageSize;
if (end > pageCount) {
end = pageCount;
}
int pageMax = pageCount / pageSize;
if (pageCount % pageSize != 0) {
pageMax++;
}
//调用伪分页的方法 subList(start,end);
listCarts = listCarts.subList(start, end);
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()%>,<%=cart.getGoods().getGprice()%>)">-</button>
<input type="text" style="width: 40px"
value="<%=cart.getCcount()%>" />
<button
onclick="add('b',<%=cart.getGoods().getGid()%>,<%=cart.getGoods().getGprice()%>)">+</button>
</td>
<td><input type="text" style="width: 40px"
value="<%=cart.getCtotal()%>" /></td>
<td>
<button onclick="delCart(<%=cart.getGoods().getGid()%>)">删除</button>
<button onclick="updateCart(<%=cart.getGoods().getGid()%>)">修改</button>
</td>
</tr>
<%
}
%>
</table>
<!-- 购物车页面实现分页 -->
<!-- 每一页现实的商品条数5条 -->
<p>
[<%=pageIndex%>/<%=pageMax%>] <a href="cart.jsp?pageIndex=1">首页</a>
<a href="cart.jsp?pageIndex=<%=pageIndex - 1 < 0 ? 1 : pageIndex - 1%>">上一页</a>
<a
href="cart.jsp?pageIndex=<%=pageIndex + 1 > pageMax ? pageMax : pageIndex + 1%>">下一页</a>
<a href="cart.jsp?pageIndex=<%=pageMax%>">尾页</a>
</p>
<script type="text/javascript">
function delCart(id){
if(window.confirm("您确定要删除吗?")){
location.href="doDel.jsp?gid="+id;
}
}
function add(type,id,price){
//根据参数id获取tr标签
var tr = document.getElementById(id);
//根据tr获取数量
var ccount = tr.cells[4].children[1].value;
console.log(ccount);
if(type === 'a'){//减法
if (ccount>0) {
ccount--;
}
}else if(type==='b'){//加法
ccount++;
}
tr.cells[4].children[1].value = ccount;
tr.cells[5].children[0].value = ccount * price;
}
function updateCart(id){
//根据id获取到数量
var tr = document.getElementById(id);
var ccount = tr.cells[4].children[1].value;
//console.log(ccount);
location.href="doUpdate.jsp?gid="+id+"&ccount="+ccount;
}
</script>
</body>
</html>
删除数据处理
<%@page import="java.util.Iterator"%>
<%@page import="com.ys.cart.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");
System.out.println(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");
%>
修改数据处理
<%@page import="com.ys.cart.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");
%>