session购物车部分功能讲解
1.商品加入购物车
2.购物车商品的删除
(1)点击删除按钮 将当前点击的id传递到do页面
(2)获取session 遍历
利用集合remove进行移除
(3)重新进行保存
3.购物车商品数量的递增或递减
4.单个商品及所有商品总价格的计算
5.购物车分页实现list.subList(start,end)
功能实现的代码:
商品加入购物车&分页实现:
<%@page import="com.zking.cart.entity.Users"%>
<%@page import="com.zking.cart.entity.Goods"%>
<%@page import="java.util.List"%>
<%@page import="com.zking.cart.biz.impl.GoodsBizImpl"%>
<%@page import="com.zking.cart.biz.IGoodsBiz"%>
<%@ 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>
<style type="text/css">
h1 {
color: plum
}
</style>
</head>
<body>
<!-- 通过session默认保存一个用户 -->
<%
Users users = new Users(1, "tang", "1111", 1, 1000);
//存储到session
session.setAttribute("users", users);
%>
<h1 align="center">糖糖购物商城首页</h1>
<hr>
<%
Users u = (Users) session.getAttribute("users");
%>
<p>
欢迎您!<%=u.getCname()%></p>
<center>
<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="admin/<%=goods.getGpath()%>" /></td>
<td>
<button onclick="addCart(<%=goods.getGid()%>)">加入购物车</button>
</td>
</tr>
<%
}
%>
</table>
</center>
<script type="text/javascript">
//加入购物车的点击事件
function addCart(cid){
//alert(cid)
location.href = "doShopping.jsp?cid="+cid;
}
</script>
</body>
</html>
<%@page import="com.zking.cart.entity.Cart"%>
<%@page import="com.zking.cart.biz.impl.GoodsBizImpl"%>
<%@page import="com.zking.cart.entity.Goods"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 加入购物车的do处理页面 -->
<%
//将点击的商品存储到购物车容器中(session)
//设置编码
request.setCharacterEncoding("utf-8");
//获取商品编号
String id = request.getParameter("cid");
int cid = 0;
if (null != id) {
cid = Integer.valueOf(id);
}
//拿到cid 根据cid获取商品的其它信息
Goods goods = new GoodsBizImpl().getGoodsByCid(cid);
//数量默认一件
//总价格 商品的单价 * 数量(1件)
//将上面获取的信息封装到Cart实体中
Cart cart = new Cart();
cart.setGoods(goods);
cart.setCcount(1);
cart.setCtotal();
out.println(cart);
//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");
%>
通过商品进行删除& 商品递增和递减
<%@page import="com.zking.cart.entity.Cart"%>
<%@page import="com.zking.cart.entity.Goods"%>
<%@page import="java.util.List"%>
<%@page import="com.zking.cart.dao.impl.GoodsDaoImpl"%>
<%@page import="com.zking.cart.dao.IGoodsDao"%>
<%@ 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>
<table border="1" width="100%">
<tr>
<th>商品编号</th>
<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 = 4;
//当用户点击下一页 获取下一页超链接参数
String pIndex = request.getParameter("pageIndex");
if (pIndex != null) {
pageIndex = Integer.valueOf(pIndex);
}
//定义一个变量存储总记录数
int pageCount = listCarts.size();
System.out.println("总记录数: " + pageCount);
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><%=cart.getGoods().getGinfo()%></td>
<td><img src="admin/<%=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>
<!-- 购物车页面实现分页 -->
<!-- 每一页现实的商品条数4条 -->
<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){
//根据参数id获取tr标签
var tr = document.getElementById(id);
//console.log(tr)
//根据tr获取数量
var ccount = tr.cells[5].children[1].value;
console.log(ccount);
if(type === 'a'){//减法
ccount--;
}else if(type==='b'){//加法
ccount++;
}
tr.cells[5].children[1].value = ccount;
}
//修改
function updateCart(id){
//根据id获取到数量
var tr = document.getElementById(id);
var ccount = tr.cells[5].children[1].value;
//console.log(ccount);
location.href="doUpdate.jsp?gid="+id+"&ccount="+ccount;
}
</script>
</body>
</html>
<%@page import="com.zking.cart.entity.Cart"%>
<%@page import="java.util.Iterator"%>
<%@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);
/* for(int i = 0;i<listCarts.size();i++){
if(cid == listCarts.get(i).getGoods().getGid()){
listCarts.remove(i);
}
} */
//迭代器的方式进行删除
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.zking.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");
%>