在之前的文章中有写过[cartitem相关的类],这里只是展示部分代码(https://blog.csdn.net/weixin_45459209/article/details/132403784?spm=1001.2014.3001.5501)
CartItemDao.java
public Integer findByUidCount(Integer uid);
public List<CartItem> findCartByUid(int begin, int pageSize,Integer uid);
CartItemDaoImpl.java
@Override
public Integer findByUidCount(Integer uid) {
return this.getValue("select count(*) from cartitem where uid=?", uid).intValue();
}
@Override
public List<CartItem> findCartByUid(int begin, int pageSize, Integer uid) {
return this.getBeanList("select * from cartitem where uid=? order by id desc limit ?,?", uid , begin , pageSize);
}
CartItemServiceImpl.java
@Override
public Page<CartItem> page(Integer pageNo, Integer pageSize, Integer uid) {
Page<CartItem> page = new Page<>();
page.setPageNo(pageNo);//将参数pageNo保存到page对象
page.setPageSize(pageSize);//将参数pageSize保存到page对象
//获取t_book表的总记数 , 并将总记数封装到page对象中
page.setPageTotalCount( cartItemDao.findByUidCount(uid));
//求出最大页
if( page.getPageTotalCount() % page.getPageSize() == 0 ){
//使用 [总记录数 / 当前页显示数量 = 总页数]
page.setPageTotal( page.getPageTotalCount() / pageSize );
}else{
//如果除不净的话,就需要+1 [总记录数 / 当前页显示数量 = 总页数 + 1]
page.setPageTotal( page.getPageTotalCount() / pageSize + 1);
}
//如果当前页大于最大页
if( page.getPageNo() > page.getPageTotal() ){
page.setPageNo(page.getPageTotal());//就将最大页设置给当前页
}
//如果当前页小于最小页
if( page.getPageNo() < 1 ){
page.setPageNo(1);//就将第一页设置给当前页
}
//通过当前网与每页显示数 求出 起始页
int begin = (page.getPageNo() - 1) * page.getPageSize();
List<CartItem> cartList = cartItemDao.findCartByUid(begin, page.getPageSize(),uid);
page.setItems(cartList);//将查询出来的结果集对象保存到page中
return page;
}
CartItemService.java
public Page<CartItem> page(Integer pageNo , Integer pageSize , Integer uid );
CartServlet.java
protected void findCartByUid(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User user =(User)req.getSession().getAttribute("user");
int pageNo=WebUtils.parseInt(req.getParameter("pageNo"),1);
int pageSize=WebUtils.parseInt(req.getParameter("pageSize"),4);
CartItemService cartItemService=new CartItemServiceImpl();
Page<CartItem> page=cartItemService.page(pageNo,pageSize,user.getId());
Gson gson=new Gson();
String str=gson.toJson(page);
resp.setContentType("application/json;charset=utf-8");
PrintWriter out = resp.getWriter();
out.print(str);
}
first.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>书城首页</title>
<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">
<link type="text/css" rel="stylesheet" href="static/css/style.css">
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo.gif" width="230px" height="80px">
<span class="wel_word">网上书城</span>
<div>
<c:choose>
<c:when test="${empty sessionScope.user}">
<a href="pages/user/login.jsp">登录</a> |
<a href="pages/user/regist.jsp">注册</a>
</c:when>
<c:otherwise>
<span>欢迎<span class="um_span">${sessionScope.user.username}</span>光临网上书城</span>
<a href="UserServlet?method=logout">注销</a>
</c:otherwise>
</c:choose>
<a href="javascript:jumpcart()">购物车</a>
<a href="pages/manager/manager.jsp">后台管理</a>
</div>
</div>
<div id="main">
<div id="book">
<div class="book_cond" style="margin-left: 0px;text-align: center">
<form id="fid">
<input type="hidden" name="method" value="searchPage">
书名:<input type="text" name="name" value="${requestScope.name}">
作者:<input type="text" name="author" value="${requestScope.author}">
价格:<input id="min" type="text" name="min" value="${requestScope.min}"> 元 -
<input id="max" type="text" name="max" value="${requestScope.max}"> 元
<input type="button" value="查询" id="searchBut"/>
</form>
</div>
<div style="text-align: center;visibility: hidden;" id="cartdiv">
<span>您的购物车中有<span style="color: red" id="bookCount"></span>件商品</span>
<div>
您刚刚将<span style="color: red" id="bookName"></span>加入到了购物车中
</div>
</div>
<div class="b_list" style="display: none;">
<div class="img_div">
<img class="book_img" alt="" src=""/>
</div>
<div class="book_info">
<div class="book_name">
<span class="sp1">书名:</span>
<span class="sp2"></span>
</div>
<div class="book_author">
<span class="sp1">作者:</span>
<span class="sp2"></span>
</div>
<div class="book_price">
<span class="sp1">价格:</span>
<span class="sp2"></span>
</div>
<div class="book_sales">
<span class="sp1">销量:</span>
<span class="sp2"></span>
</div>
<div class="book_amount">
<span class="sp1">库存:</span>
<span class="sp2"></span>
</div>
<div class="book_add">
<input type="button" value="加入购物车" class="addToCart" bookId=""/>
</div>
</div>
</div>
</div>
<!--分页 -->
<div id="page_nav">
<a href="#">首页</a>
<a href="#">上一页</a>
<a href="#">下一页</a>
<a href="#">末页</a>
共<span>100</span>页,<span>100</span>条记录 到第<input name="pn" id="pn_input"/>页
<input id="butid" type="button" value="确定">
</div>
</div>
<div id="bottom">
<span>
网上书城.Copyright ©2020
</span>
</div>
</body>
</html>
<script src="static/script/jquery-3.6.0.min.js"></script>
<script src="static/layui/layui.js"></script>
<script>
var peipage ;
function jumpcart(){
if ("${sessionScope.user}" == "") {
layer.msg('请先登录才能访问购物车!', {
icon: 2,
time: 2000 //2秒关闭(如果不配置,默认是3秒)
});
}else{
window.location.href = "pages/cart/cart.jsp";
}
}
function mypage(flag) {
var pageNo = "";
if("首页" == flag){
pageNo = 1;
}else if("上一页"==flag){
pageNo = peipage.pageNo - 1 ;
}else if("下一页"==flag){
pageNo = peipage.pageNo + 1 ;
}else if("末页"==flag){
pageNo = peipage.pageTotal ;
}else{
pageNo = flag;
}
//alert( $("#fid").serialize())
//alert($("#fid").serialize()+"&pageNo="+pageNo);
$.post("BookServlet", $("#fid").serialize()+"&pageNo="+pageNo, function (msg) {
peipage = msg;
$("#page_nav").find("span").eq(0).html(msg.pageTotal)
$("#page_nav").find("span").eq(1).html(msg.pageTotalCount)
$("div[peijie=delete]").remove();
for (let i = 0; i < msg.items.length; i++) {
newdiv = $("div.b_list:first").clone(true);//clone(true)事件一起复制
newdiv.attr("peijie" , "delete");//给这些克隆出来的元素添加一个属性,方便后面删除他们
newdiv.css("display", "");
newdiv.find("img.book_img").attr("src", msg.items[i].imgPath);
newdiv.find("div.book_name").find("span").eq(1).html(msg.items[i].name);
newdiv.find("div.book_author").find("span").eq(1).html(msg.items[i].author);
newdiv.find("div.book_price").find("span").eq(1).html("¥" + msg.items[i].price);
newdiv.find("div.book_sales").find("span").eq(1).html(msg.items[i].sales);
newdiv.find("div.book_amount").find("span").eq(1).html(msg.items[i].stock);
newdiv.find("div.book_add").find("input").attr("bookId", msg.items[i].id)
$("div.b_list:last").after(newdiv)
}
})
}
$(function () {
mypage("首页");//网页加载完成调用此方法显示第一页数据
$("#butid").click(function(){
//获取输入框里面的值
var pageNo = $("#pn_input").val();
var zz2 = new RegExp("^[0-9]*[1-9][0-9]*$");
if (zz2.test(pageNo)) {
mypage(pageNo);
} else {
layer.msg('请输入整数!', {
icon: 2,
time: 2000 //2秒关闭(如果不配置,默认是3秒)
});
}
});
$("#searchBut").click(function (){
mypage("首页");
});
$("#page_nav").find("a").eq(0).click(function(){
//点击首页时显示第一页数据
mypage("首页")
})
$("#page_nav").find("a").eq(1).click(function(){
//点击上一页时显示数据
mypage("上一页")
})
$("#page_nav").find("a").eq(2).click(function(){
//点击下一页时显示数据
mypage("下一页")
})
$("#page_nav").find("a").eq(3).click(function(){
//点击末页时显示数据
mypage("末页")
})
$("input.addToCart").click(function () {
if ("${sessionScope.user}" == "") {
layer.msg('请先登录在来添加购物车!', {
icon: 2,
time: 2000 //2秒关闭(如果不配置,默认是3秒)
});
} else {
var id = $(this).attr("bookId");
$.get("CartServlet", "method=addItem&id=" + id, function (msg) {
// alert( msg.bookName + " = " + msg.bookCount)
$("#bookCount").html(msg.bookCount);
$("#bookName").html(msg.bookName)
$("#cartdiv").css("visibility", "");//显示出来
layer.msg('添加购物车成功', {
icon: 1,
time: 2000 //2秒关闭(如果不配置,默认是3秒)
});
});
}
});
});
</script>
cart.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>购物车</title>
<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">
<link type="text/css" rel="stylesheet" href="static/css/style.css">
<script src="static/script/jquery-1.7.2.js"></script>
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo.gif" width="230px" height="80px">
<span class="wel_word">购物车</span>
<div>
<span>欢迎<span class="um_span">${sessionScope.user.username}</span>光临网上书城</span>
<a href="pages/order/order.jsp">我的订单</a>
<a href="UserServlet?method=logout">注销</a>
<a href="index.jsp">返回</a>
</div>
</div>
<div id="main">
<table>
<tr>
<td>商品名称</td>
<td>数量</td>
<td>单价</td>
<td>金额</td>
<td>操作</td>
</tr>
<tr style="display: none" class="c_list">
<td></td>
<td></td>
<td></td>
<td></td>
<td><a class="deleteA" href="javascript:void(0)">删除</a></td>
<input type="hidden" value="0">
</tr>
</table>
<%--分页--%>
<br>
<div id="page_nav">
<a href="javascript:void(0)">首页</a>
<a href="javascript:void(0)">上一页</a>
<a href="javascript:void(0)">下一页</a>
<a href="javascript:void(0)">末页</a>
共<span>100</span>页,<span>100</span>条记录 到第<input name="pn" id="pn_input"/>页
<input id="butid" type="button" value="确定">
</div>
<script src="static/layui/layui.js"></script>
<script>
var zhupage;
function mypage(flag) {
var pageNo = "";
if ("首页" == flag) {
pageNo = 1;
} else if ("上一页" == flag) {
pageNo = zhupage.pageNo - 1;
} else if ("下一页" == flag) {
pageNo = zhupage.pageNo + 1;
} else if ("末页" == flag) {
pageNo = zhupage.pageTotal;
} else {
pageNo = flag;
}
$.post("CartServlet", "method=findCartByUid&pageNo=" + pageNo, function (msg) {
zhupage = msg;
$("tr[peijie=delete]").remove();
$("#page_nav").find("span").eq(0).html(msg.pageTotal)
$("#page_nav").find("span").eq(1).html(msg.pageTotalCount)
for (let i = 0; i < msg.items.length; i++) {
var cart = $(".c_list:first").clone(true);
cart.attr("peijie", "delete");//给这些克隆出来的元素添加一个属性,方便后面删除他们
cart.css("display", "");
cart.find("td").eq(0).html(msg.items[i].name);
cart.find("td").eq(1).html(msg.items[i].count);
cart.find("td").eq(2).html(msg.items[i].price);
cart.find("td").eq(3).html(msg.items[i].totalPrice);
// console.log(msg.items[i].uid)
cart.find("input").val(msg.items[i].id);
$(".c_list:last").after(cart);
}
});
}
$(function(){
mypage("首页");
$("#butid").click(function () {
//获取输入框里面的值
var pageNo = $("#pn_input").val();
var zz2 = new RegExp("^[0-9]*[1-9][0-9]*$");
if (zz2.test(pageNo)) {
mypage(pageNo);
} else {
layer.msg('请输入整数!', {
icon: 2,
time: 2000 //2秒关闭(如果不配置,默认是3秒)
});
}
});
})
$("#page_nav").find("a").eq(0).click(function(){
//点击首页时显示第一页数据
mypage("首页")
})
$("#page_nav").find("a").eq(1).click(function(){
//点击上一页时显示数据
mypage("上一页")
})
$("#page_nav").find("a").eq(2).click(function(){
//点击下一页时显示数据
mypage("下一页")
})
$("#page_nav").find("a").eq(3).click(function(){
//点击末页时显示数据
mypage("末页")
})
</script>
<%-- <div class="cart_info">--%>
<%-- <span class="cart_span">购物车中共有<span class="b_count">4</span>件商品</span>--%>
<%-- <span class="cart_span">总金额<span class="b_price">90.00</span>元</span>--%>
<%-- <span class="cart_span"><a href="#">清空购物车</a></span>--%>
<%-- <span class="cart_span"><a href="checkout.jsp">去结账</a></span>--%>
<%-- </div>--%>
</div>
<div id="bottom">
<span>
网上书城.Copyright ©2020
</span>
</div>
</body>
</html>
运行图片:
关于使用jquery的其他方式来实现的方式
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>购物车</title>
<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">
<link type="text/css" rel="stylesheet" href="static/css/style.css">
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo.gif" width="230px" height="80px">
<span class="wel_word">购物车</span>
<div>
<span>欢迎<span class="um_span">老王</span>光临网上书城</span>
<a href="pages/order/order.jsp">我的订单</a>
<a href="index.jsp">注销</a>
<a href="index.jsp">返回</a>
</div>
</div>
<div id="main">
<table>
<tr>
<td>商品名称</td>
<td>数量</td>
<td>单价</td>
<td>金额</td>
<td>操作</td>
</tr>
</table>
<br/>
<div class="cart_info">
<span class="cart_span">购物车中共有<span class="b_count">4</span>件商品</span>
<span class="cart_span">总金额<span class="b_price">90.00</span>元</span>
<span class="cart_span"><a href="#">清空购物车</a></span>
<span class="cart_span"><a href="pages/cart/checkout.jsp">去结账</a></span>
</div>
</div>
<div id="bottom">
<span>
网上书城.Copyright ©2020
</span>
</div>
</body>
</html>
<script src="static/script/jquery-1.7.2.js"></script>
<script src="static/layui/layui.js"></script>
<script>
var peipage;
$(function () {
mypage()
$("#main").scroll(function () {
// 判断滚动条是否到达底部
if (this.scrollTop + this.clientHeight >= this.scrollHeight) {
mypage("下一页");
}
})
})
function mypage(flag) {
var pageNo = 1 ;
if ("下一页" == flag) {
pageNo = peipage.pageNo + 1;
}
$.post("CartServlet", "method=findCartByUid&pageNo="+pageNo, function (msg) {
peipage = msg;
for (let i = 0; i < msg.items.length; i++) {
$("<tr>" +
"<td>" + msg.items[i].name + "</td>" +
"<td>" + msg.items[i].count + "</td>" +
"<td>" + msg.items[i].price + "</td>" +
"<td>" + msg.items[i].totalPrice + "</td>" +
"<td><a href='#'>删除</a></td>" +
"</tr>").appendTo("table");
}
});
}
</script>
注所有的配置都一样,只需要更换cart.jsp即可,显示的效果和以上的效果基本一样