图书购买系统之商品分类分页--根据主页面传来的值分类显示商品并实现动态分页功能

【网页设计】基于HTML在线图书商城购物项目设计与实现_(图书商城10页) bootstarp响应式 web网页设计实例作业 采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为(1)html文件:其中index.html是首页、其他html为二级页面; (2)css文件:css全部页面样式,文字滚动, 图片放大等; (3)js文件:js实现动态轮播特效, 表单提交, 点击事件等等(网页中运用到js代码)(1)首页:进入网页中看到的第一个页面(LOGO、公司名称、导航、banner 阅读详情

1.实现效果图


2.home.jsp,主页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>bootstore</title>
		<!--引入bootstrap.css-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrap/css/bootstrap.css"/>
		<!--引入myscss.css-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/myscss.css" />
		<!--引入jquery.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/jquery-3.1.1.js"></script>
		<!--bootstrap.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/bootstrap.js"></script>
		<!--home.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/foreground/book/home.js"></script>
		<!--contextPath-->
		<script type="text/javascript">
			var contextPath = "${pageContext.request.contextPath}";
		</script>
	</head>
	<body>
		<!--公用头部-->
		<!-- <div id="navhead"></div> -->
		<%@include file="/foreground/common/head.jsp"%>
		<!--<nav class="navbar navbar-default">
		  	<div class="container">
			    <div class="navbar-header">
			      	<button type="button" data-toggle="collapse" data-target="#collapse-1" aria-expanded="false" class="navbar-toggle collapsed">
			        	<span class="sr-only">Toggle navigation</span>
			        	<span class="icon-bar"></span>
				        <span class="icon-bar"></span>
				        <span class="icon-bar"></span>
				        <span class="icon-bar"></span>
			      	</button>
			      	<a href="index.html">
			      		<img src="../../img/bookimages/logo.png" />
			      	</a>
			    </div>
			    <div class="collapse navbar-collapse backcolor" id="collapse-1">
			      	<ul class="nav navbar-nav pull-right">
			      		<li><a href="#"><span class="glyphicon glyphicon-shopping-cart">购物车|</span></a></li>
			      		<li><a href="#"><span class="glyphicon glyphicon-question-sign">帮助中心|</span></a></li>
			      		<li><a href="login.html"><span class="glyphicon glyphicon-user">我的账户|</span></a></li>
			      		<li><a href="register.html"><span class="glyphicon glyphicon-pencil">新用户注册</span></a></li>
			      	</ul>
			    </div>
		  	</div>
		</nav>-->
		<!--导航栏-->
		<div class="container">
			<div class="text-nowrap text-center menu">
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=文学">文学</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=生活">生活</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=计算机">计算机</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=外语">外语</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=经管">经管</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=励志">励志</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=社科">社科</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=学术">学术</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=少儿">少儿</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=艺术">艺术</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=原版">原版</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=科技">科技</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=考试">考试</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=生活百科">生活百科</a>
				<a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=全部目录商品" id="yellow">全部目录商品</a>		
			</div>
			<div class="clearfix searchcolor">
				<form class="navbar-form navbar-right searchmargin" role="search">
					<div class="form-group">
					    <input id="searchContent" type="text" class="form-control">
					    <div id="searchResult" style="background:Snow;position:absolute;left:71%;width:15%;z-index:1;"></div>
					</div>
					<button type="button" onclick="doSearch()" class="btn btn-info">搜索</button>
				</form>
			</div>
		</div>
		<!--新书上架-->
		<div class="container margintop">
			<div class="row">
				<div class="col-md-2"></div>
				<div class="col-md-8">
					<div class="media">
					  	<div class="media-left">
					    	<a href="#">
					      		<img class="media-object" src="<%=request.getContextPath()%>/img/otherimages/home_book.PNG" alt="图书">
					    	</a>
					  	</div>
					  	<div class="media-right paddingleft">
					    	<h2 class="bg-danger">新书上架</h2>
					    	<h5 class="htext">JAVA入门经典</h5>
					    	<p class="text-muted">《Java入门经典》,是2012年出版的图书,是2012年出版的图书是2012年出版的图书作者是Rogers Cadenhead。 《Java入门经典(第6版)》总共24章,先讲解了Java程序的编写流程、工作原理等内容;然后介绍了有关Java编程 的基本知识,包括变量、条件语句、</p>
					  		<img class="img-responsive thumbnail" src="<%=request.getContextPath()%>/img/otherimages/home_book2.PNG">
					  	</div>
					</div>
				</div>
				<div class="col-md-2"></div>
			</div>
		</div>
		<!--公告板和本周热卖-->
		<div class="container margintop">
			<div class="row">
				<div class="col-md-1"></div>
				<div class="col-md-5">
					<h2 class="bg-success">公告板</h2>
					<ul class="list-group-item">
						<li><a>图书三折起</a></li>
						<li><a>甩卖了,<java疯狂讲义10元起售></a></li>
						<li><a>新书到了,欢迎订购</a></li>
						<li><a>系统维护通知</a></li>
						<li><a>好消息好消息</a></li>
					</ul>
				</div>
				<div class="col-md-5">
					<h2 class="bg-danger">本周热卖</h2>
					<div class="pull-left text-center" id="book">
						<div class="col-sm-6">
							<img src="<%=request.getContextPath()%>/img/bookimage/20285763-1_b.jpg" /><br />
							<span>书名:java核心技术</span><br />
							<span>售价:XXX</span>
						</div>
						<div class="col-sm-6">
							<img src="<%=request.getContextPath()%>/img/bookimage/20412979-1_b.jpg" /><br />
							<span>书名:javascript</span><br />
							<span>售价:XXX</span>
						</div>
					</div>
				</div>
				<div class="col-md-1"></div>
			</div>
		</div>
		<nav class="navbar navbar-default bottom margin">
			<div class="container">
				<div class="row">
					<div class="col-md-1"></div>
					<div class="col-md-4">
						<img src="<%=request.getContextPath()%>/img/otherimages/logo.png">
					</div>
					<div class="col-md-7">
						<div style="margin-top: 10px;">
							CONTACT US<br>
						    COPYRIGHT 2017 ©BootStore AS Rights RESERVED
						</div>
					</div>
				</div>
			</div>
		</nav>
	</body>
</html>

3.home.js

//输入框键盘弹起事件,在这里发送ajax请求
$(function(){
	$("#searchContent").keyup(function(){
		//设置ajax请求url和请求内容
		var sendUrl = contextPath+"/AjaxShowSearchProductNameServlet?time"+new Date().getTime();
		var sendDate = {
				"value":$("#searchContent").val()
		}
		//发送ajax请求
		$.ajax({
			type:"post",
			url:sendUrl,
			data:sendDate,
			async:true,
			//请求成功的回调函数
			success:function(backData,textStatus,xmlHttprequest){
				var ss = backData.split(",");
				var childDiv = "";
				for(var i = 0;i < ss.length;i++){
					childDiv +="<div onclick='setSearchContent(this)'>" + ss[i] + "</div>";
				}
				//显示搜索框
				$("#searchResult").html(childDiv);
				$("#searchResult").show();
			}
		});
	});
});

//选中搜索列表中的一条数据,设置为搜索框内容
function setSearchContent(caller){
	$("#searchContent").val($(caller).html());
	$("#searchResult").hide();
}

//搜索功能
function doSearch(){
	//获取要搜索的内容
	var category = $("#searchContent").val();
	//alert(contextPath+"/ShowBlurProductsServlet?category="+category);
	window.location.href = contextPath+"/ShowBlurProductsServlet?category="+category;
}


4.bookcategory.jsp,分页页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>bookcategory</title>
		<!--引入bootstrap.css-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrap/css/bootstrap.css"/>
		<!--引入myscss.css-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/myscss.css" />
		<!--引入jquery.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/jquery-3.1.1.js"></script>
		<!--bootstrap.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/bootstrap.js"></script>
		<!--bookcategory.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/foreground/book/bookcategory.js"></script>
	</head>
	<body>
		<!--公用头部-->
		<!-- <div id="navhead"></div> -->
		<%@include file="/foreground/common/head.jsp"%>
		<!--路径导航-->
		<div class="container">
			<ol class="breadcrumb">
			  	<li><a href="<%=request.getContextPath()%>/foreground/book/home.jsp">首页</a></li>
			  	<li><a id="navpath" href="#">全部商品</a></li>
			</ol>
		</div>
		<!--商品列表-->
		<div class="container">
			<div class="row">
				<div class="col-md-1"></div>
				<div class="col-md-10">
					<img class="img" src="<%=request.getContextPath()%>/img/otherimages/productlist.gif" />
					<div class="text-center" id="books">
						<c:forEach var="book" varStatus="bookidx" items="${bookPage.ps}">
							<div class="col-md-3">
								<div class="thumbnail">
									<img src="<%=request.getContextPath()%>/${book.imgurl}"/><br />
									<span>书名:${book.name}</span><br />
									<span>售价:${book.price}</span><br />
									<input type="image" onclick="addCart('${book.id}','${book.name}','${book.price}','${book.num}')" src="<%=request.getContextPath()%>/img/bookimages/buybutton.gif" />
								</div>
							</div>
						</c:forEach>
					</div>
				</div>
				<div class="col-md-1"></div>
			</div>
		</div>
		<!--分页-->
		<c:if test="${bookPage.isblur!='yes'}">
			<div class="container">
			  	<nav class="text-center">
				  	<ul class="pagination text-center" >
				    	<li><a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=1&category=${bookPage.category}"><span>«首页</span> </a></li>
				    	<li><a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=${(bookPage.currentPage>1)?(bookPage.currentPage-1):1}&category=${bookPage.category}">上一页</a></li>
					    <li><a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=${(bookPage.currentPage<bookPage.totalPage)?(bookPage.currentPage+1):bookPage.totalPage}&category=${bookPage.category}">下一页</a></li>
					    <li><a href="<%=request.getContextPath()%>/ShowProductsServlet?currentPage=${bookPage.totalPage}&category=${bookPage.category}"> <span>末页»</span></a></li>
					    <li class="pagespan">${bookPage.currentPage}/${bookPage.totalPage}</li>
				  	</ul>
				</nav>
			</div>
		</c:if>
	</body>
</html>


5.bookcategory.js

//1.路径导航部分
//截取从home.html传过来的URL
$(function(){
	var url = window.location.search;//从问号 (?) 开始的 URL(查询部分),此时等号后面是乱码
	url = decodeURI(url);//解码,把乱码变成正常的文字
	var substr = url.substr(url.indexOf("category=")+9);//截取字符串,截取category=之后的内容
	$("#navpath").html(substr);//将截取到的字符串放到路径导航的位置
});

//2.添加购物车部分
//思路:把添加购物车的数据存放在localStorage中
//方法传参:书的id,书名,书售价,书的库存
function addCart(id,name,price,num){
	//1.创建一个js对象
	var book = {
		"product_id":id,   //书的id
		"name":name,       //书名
		"price":price,     //售价
		"num":num,         //库存
		"buynum":1         //购买数量
	}
	//2.获取已经保存的数据
	var storebook = localStorage.getItem("carts");
	//3.将已经获取到的数据转换成数组
	var bookArr = JSON.parse(storebook);//JSON.parse() 方法解析一个JSON字符串
	//如果购物车离得数据为空,说明从来没有保存过数据
	if(bookArr == null){
		//创建一个数组
		var books = new Array();
		//把要保存的数据存到数组中
		books.push(book);
		//将数组转换成字符串
		var bookstr = JSON.stringify(books);
		//将字符串保存到localStorge中
		localStorage.setItem("carts",bookstr);
	}
	//已经存过数据了
	else{
		//1.判断我们存的书籍是否已经在购物车了,如果存在,数量+1
		var isFind = false;
		for(var i = 0;i < bookArr.length; i++){
			var b = bookArr[i];
			if(b.product_id == book.product_id){
				b.buynum++;
				isFind = true;
				break;
			}
		}
		//2.如果不存在,将书籍添加到购物车中
		if(isFind == false){
			bookArr.push(book);
		}
		//3.把bookArr重新转换成字符串保存
		var s = JSON.stringify(bookArr);
		localStorage.setItem("carts",s);
	}
	alert("添加成功!");
}


6.ShowProductsServlet.java,处理书籍信息显示

package com.chinasoft.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.chinasoft.dao.impl.ImplProductDao;
import com.chinasoft.entity.PageBean;

/**
 * @author jf
 * 处理书籍信息的显示
 */
@WebServlet("/ShowProductsServlet")
public class ShowProductsServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ShowProductsServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.获取请求参数
		String currentPage = request.getParameter("currentPage");
		String category = request.getParameter("category");
		//2.根据请求参数查询数据库
		ImplProductDao implProductDao = new ImplProductDao();
		try {
			PageBean bookPage = implProductDao.findPageBooks(Integer.parseInt(currentPage), 8, category);
			//3.保存数据、跳转页面
			request.getSession().setAttribute("bookPage", bookPage);
			request.getRequestDispatcher("/foreground/book/bookcategory.jsp").forward(request, response);
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

7.AjaxShowSearchProductNameServlet.java实现模糊查询书名

package com.chinasoft.servlet;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.chinasoft.dao.impl.ImplProductDao;
import com.chinasoft.entity.Product;

/**
 * @author jf
 * 功能:根据搜索条件返回符合条件的书名
 */
@WebServlet("/AjaxShowSearchProductNameServlet")
public class AjaxShowSearchProductNameServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public AjaxShowSearchProductNameServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.获取请求参数
		String value = request.getParameter("value");
		ImplProductDao implProductDao = new ImplProductDao();
		try {
			//2.根据请求模糊检索数据库
			List<Product> list = implProductDao.findBooksByBlurName(value);
			//3.把所有符合条件的书拼接成字符串
			String books = "";
			if("".equals(value)){
				
			}else{
				for(int i = 0;i<list.size();i++){
					if(i>0){
						books += ",";
					}
					books += list.get(i).getName();
				}
			}
			//4.向客户端输出字符串
			response.getWriter().write(books);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
				
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}


8.ShowBlurProductsServlet.java根据搜索框的搜索内容,搜索符合条件的书籍,跳转新页面显示书籍

package com.chinasoft.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.chinasoft.dao.impl.ImplProductDao;
import com.chinasoft.entity.PageBean;

/**
 * @author jf
 * 根据搜索框的搜索内容,搜索符合条件的书籍,跳转新页面显示书籍
 */
@WebServlet("/ShowBlurProductsServlet")
public class ShowBlurProductsServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ShowBlurProductsServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.获取请求参数
		String category = request.getParameter("category");
		//2.根据请求参数查询数据库
		ImplProductDao implProductDao = new ImplProductDao();
		try {
			PageBean bookPage = implProductDao.findPageBooksByBlurName(category);
			//3.保存数据、跳转页面
			request.getSession().setAttribute("bookPage", bookPage);
			request.getRequestDispatcher("/foreground/book/bookcategory.jsp").forward(request, response);
		}catch (NumberFormatException e) {
			e.printStackTrace();
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

9.ShowProductsServlet.java处理书籍信息的显示

package com.chinasoft.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.chinasoft.dao.impl.ImplProductDao;
import com.chinasoft.entity.PageBean;

/**
 * @author jf
 * 处理书籍信息的显示
 */
@WebServlet("/ShowProductsServlet")
public class ShowProductsServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ShowProductsServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.获取请求参数
		String currentPage = request.getParameter("currentPage");
		String category = request.getParameter("category");
		//2.根据请求参数查询数据库
		ImplProductDao implProductDao = new ImplProductDao();
		try {
			PageBean bookPage = implProductDao.findPageBooks(Integer.parseInt(currentPage), 8, category);
			//3.保存数据、跳转页面
			request.getSession().setAttribute("bookPage", bookPage);
			request.getRequestDispatcher("/foreground/book/bookcategory.jsp").forward(request, response);
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

10.ProductDao.java接口

package com.chinasoft.dao;

import java.sql.SQLException;
import java.util.List;

import com.chinasoft.entity.PageBean;
import com.chinasoft.entity.Product;

public interface ProductDao {
	//查找所有的书籍
	public List<Product> findAllBooks() throws SQLException;
	//根据书的id查找指定的书籍
	public Product findBookById(String id) throws SQLException;
	//查找某一分类下的书籍总数
	public long count(String category) throws SQLException;
	//分页查询,查找当前页下、每页显示指定size下、以及当前分类下的书籍
	public List<Product> findBooks(int currentPage, int pageSize,String category) throws SQLException;
	//根据指定书名搜索书籍
	public Product searchBookByName(String name) throws SQLException;
	//模糊检索,根据模糊条件查找数据库,返回list集合
	public List<Product> findBooksByBlurName(String name) throws SQLException;
	//模糊检索,根据模糊条件查找数据库,返回pageBean
	public PageBean findPageBooksByBlurName(String name) throws SQLException;
	//分页查询,返回pageBean,pegeBean封装了当前页的所有信息
	public PageBean findPageBooks(int currentPage, int pageSize,String category) throws SQLException;
}

11.ImplProductDao.java,ProductDao接口实现类

package com.chinasoft.dao.impl;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import com.chinasoft.dao.ProductDao;
import com.chinasoft.entity.PageBean;
import com.chinasoft.entity.Product;
import com.chinasoft.util.C3P0Util;

public class ImplProductDao implements ProductDao{

	/**
	 * 查找所有的书籍
	 */
	@Override
	public List<Product> findAllBooks() throws SQLException {
		//1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		List<Product> list = qr.query("select * from products", new BeanListHandler<>(Product.class));
		return list;
	}

	/**
	 * 根据书的id查找指定的书籍
	 */
	@Override
	public Product findBookById(String id) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "select * from products where id=?";
		Product product = qr.query(sql,new BeanHandler<Product>(Product.class),id);
		return product;
	}

	/**
	 * 查找某一分类下的书籍总数
	 */
	@Override
	public long count(String category) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = null;
		long count = 0;
		if ("全部商品目录".equals(category)) {
			sql = "select COUNT(*) from products";
			count = qr.query(sql, new ScalarHandler<>());
		}
		else{
			sql = "select COUNT(*) from products where category=?";
			count = qr.query(sql, new ScalarHandler<>(),category);
		}
		return count;
	}

	/**
	 *
	 * 分页查询,查找当前页下、每页显示指定size下、以及当前分类下的所有书籍
	 */
	@Override
	public List<Product> findBooks(int currentPage, int pageSize, String category) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = null;
		List<Product> products = null;
		if ("全部商品目录".equals(category)) {
			sql = "select * from products limit ?,?";
			if (currentPage>=1) {
				products = qr.query(sql, new BeanListHandler<>(Product.class),(currentPage-1)*pageSize,pageSize);
			}
		}
		else{
			sql = "select * from products where category=? limit ?,?";
			if (currentPage>=1) {
				products = qr.query(sql, new BeanListHandler<>(Product.class), category,(currentPage-1)*pageSize,pageSize);
			}
			
		}
		return products;
	}

	/**
	 * 根据指定书名搜索书籍
	 */
	@Override
	public Product searchBookByName(String name) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql = "select * from products where name=?";
		Product product = qr.query(sql,new BeanHandler<Product>(Product.class),name);
		return product;
	}

	/**
	 * 模糊检索,根据模糊条件查找数据库,返回list
	 */
	@Override
	public List<Product> findBooksByBlurName(String name) throws SQLException {
		//1.创建QueryRunner对象
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		List<Product> list = qr.query("select * from products where name like ?", new BeanListHandler<>(Product.class),"%"+name+"%");
		return list;
	}
	
	/**
	 * 模糊检索,根据模糊条件查找数据库,返回pagebean
	 */
	@SuppressWarnings("unused")
	@Override
	public PageBean findPageBooksByBlurName(String name) throws SQLException {
		// 1.获取符合条件的书的集合
		List<Product> list = findBooksByBlurName(name);
		// 2.获取搜索到的所有书籍的个数
		int totalcount = list.size();
		// 3.设置当前页和最大页
		int currentPage = 1;
		int totalPage = 1;
		if (totalcount == 0) {
			currentPage = 0;
			totalPage = 0;
		}
		// 4.创建PageBean对象
		PageBean pageBean = new PageBean();
		pageBean.setCurrentPage(currentPage);
		pageBean.setTotalCount(totalcount);
		pageBean.setTotalPage(totalcount);
		pageBean.setCurrentCount(totalcount);
		pageBean.setIsblur("yes");
		if (list!=null) {
			pageBean.setPs(list);
		}
		pageBean.setCategory(name);
		return pageBean;
	}

	/**
	 * 分页查询,返回pageBean,pegeBean封装了当前页的所有信息
	 */
	@Override
	public PageBean findPageBooks(int currentPage, int pageSize, String category) throws SQLException {
		// 1.获取当前类别下,一页显示pageSize条,当前页所对应的所有书籍
		ImplProductDao impl = new ImplProductDao();
		List<Product> products = impl.findBooks(currentPage, pageSize, category);
		// 2.获取当前类别下所有书籍的个数
		long totalcount = impl.count(category);
		//如果当前分类下 的图书个数为0,则currentPage为0
		if (totalcount == 0) {
			currentPage = 0;
		}
		// 3.计算要显示的总页数
		int totalpage = (int) Math.ceil(totalcount / (double) pageSize);
		// 4.创建PageBean对象
		PageBean pageBean = new PageBean();
		pageBean.setCurrentPage(currentPage);
		pageBean.setTotalCount(totalcount);
		pageBean.setTotalPage(totalpage);
		pageBean.setCurrentCount(pageSize);
		pageBean.setPs(products);
		pageBean.setCategory(category);
		return pageBean;
	}

}





商品分类代码 【代码】商品分类代码。 阅读详情

相关推荐

uniapp 商品分类页面,左侧导航,右侧商品

uniapp 商品分类页面,左侧导航,右侧商品

maoge_666的博客 1321

web课程设计网页规划与设计 :网页设计——在线书店(12个页面) HTML+CSS+JavaScript 学生网页课程设计期末作业

web课程设计网页规划与设计 :网页设计——在线书店(12个页面) HTML+CSS+JavaScript 学生网页课程设计期末作业 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总数量太多?没有合适的模板?等等一系列问题。你想要解决的问题,在这篇博文中基本都能满足你的需求~ 原始HTML+CSS+JS页面设计, web大学生网页设计作业源码,这是一个不错的网页制作,画面精明,非常适合初学者学习使用。 作品介绍 1.网页作品简介方面 :HTML期末

七夕情人节表白网页代码100款 HTML5网页设计与制作1120款 Echarts大屏数据150款 1万+

JAVA WEB实现图书管理系统 —— 主页面图书信息显示

图书信息显示页面如下: 一、编写Book类,封装图书的信息 package entity; public class Book { private String id; private String name; private String price; private String num; private String type; public Book() { super(); // TODO Auto-generated constructor stub } public

qq_42197887的博客 5807

java实现控制台购书系统

面向对象实现相信看了对你理解更为透彻

saber的博客 5050

毕业设计:基于java的网上购书系统设计与实现

基于Java的网上购书系统设计与实现的系统性能评估是对系统在处理用户购书交易过程中的响应速度、稳定性和资源利用率进行全面的评估和分析。以下是该系统的性能评估总结和分析:1、负载测试:负载测试是评估系统在一定负载下的响应速度和资源利用率。通过模拟不同的购书交易场景,如用户浏览书籍、添加书籍到购物车、下订单、支付等操作,测试系统在各种交易场景下的响应时间、吞吐量和资源利用率。根据测试结果,可以找出系统在交易流程中的性能瓶颈,如页面加载速度慢、数据库查询效率低下等,从而进行针对性的优化。

weixin_39827856的博客 1500

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

html5商品列表页tab,基于vue的tab-list类目切换商品列表组件的示例代码

在大多数电商场景中,页面都会有类目切换加上商品列表的部分,页面大概会长这样每次写类似场景的时候,都需要去为类目商品列表写很多逻辑,为了提高开发效率我决定将这一部分抽离成组件。实现1.样式所有tab栏的样式和商品列表的样式都提供插槽,供业务自己定制2.变量isTabFixed: false,//是否吸顶tab: 1,//当前tabpage: 1,//当前页数listStatus: {finished...

weixin_35942549的博客 678

3个国产AI大模型实战:如何用DeepSeek+豆包+千问批量生成高质量测试用例(附完整代码)

本文详细介绍了如何利用DeepSeek、豆包和千问三大国产AI大模型批量生成高质量测试用例的实战方法。通过Python环境配置、多模型SDK安装和统一接口封装,实现高效测试用例生成,并结合结构化提示词设计和多模型结果对比分析,显著提升测试效率和覆盖率。

weixin_29197699的博客 710

数据结构课程设计——图书购买模拟系统(C++)

作者目前(2023年12月)是一名计算机大三学生,该课程设计是我一年前写的,最近快到期末了,就把去年做的课设报告的极简版发出来供大家参考。如果有数据结构课设需求可以后台私信我(留下联系方式,建议QQ,实在急的话可以加我小号QQ 1242484192),但是有偿(看具体需求,够学长填肚子就好,淘宝上300-800一个课设没必要),特别强调:触犯学术不端的需求不做。本课题拟开发一个“图书购买模拟系统”,该系统包括书库子系统和购物车子系统。

systemcall0122的博客 2031

用MATLAB从零实现六足机器人步态仿真:交替三角与波动步态保姆级教程

本文详细介绍了如何使用MATLAB从零实现六足机器人的两种经典步态仿真:交替三角支撑步态和波动步态。通过参数定义、相位设置、运动轨迹生成和三维可视化等步骤,帮助读者掌握六足机器人步态规划的核心技术。教程包含完整代码和详细解析,适合机器人爱好者和相关专业学生学习实践。

weixin_26765363的博客 228

从零构建:Trinamic API在STM32上的深度移植与TMC-IDE通信实战

本文详细介绍了如何从零开始在STM32平台上深度移植Trinamic API,并实现与TMC-IDE工具的稳定通信。内容涵盖SPI底层驱动定制、寄存器配置、高级功能实现及调试技巧,重点解析了TMC5160芯片的集成实践,帮助开发者构建可靠的嵌入式运动控制系统。

w1x2y3的博客 254

【京淘电商】04--商品分类模块

一,显示商品分类 1.业务接口文档 请求路径: /itemCat/findItemCatList/{level} 请求类型: get 请求参数: level 参数名称 参数说明 备注 level 查询级别 1查询一级分类 2查询1-2 级商品分类 3查询1-2-3级商品分类 业务说明: 查询3级分类菜单数据 要求三层结构嵌套 返回值: SysResult对象 参数名称 参数说明 备注 status 状态信息 200表示服务器请求成功 201表示服务器异常 ms

qq_48848473的博客 783

MTK平台Wi-Fi学习--wifi channel 通过国家码进行功率限制和wifi eFEM 基本配置和wifi Tx SEM问题

本文介绍了WiFi功率限制配置和eFEM硬件设置方法。在功率限制方面,通过国家码可针对不同信道设置功率上限,需在rlm_txpwr_init.h文件中配置信道和功率值(单位0.5dBm),WiFi6的HE_TB模式还可分RU设置。eFEM硬件配置需参考平台设计,注意VDET接口处理,首次使用建议提交HW/SW案例审核。软件配置需获取专用FEM包,包含NVRAM、GPIO等文件,按指导合并后版本才会切换为eFEM版本。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 484

乐优商城(02)--商品分类

乐优商城(02)–商品分类 一、创建数据库 导入sql文件,运行之 得到以下数据表: 二、页面实现 2.1、url请求分析 找到页面Category.vue,目录路径为:src/pages/item/Category.vue 商品分类使用了树状结构,而这种结构的组件vuetify并没有提供,这里自定义了一个树状组件: <template> <v-card> <v-flex xs12 sm10> <v-tree url="/item/

m0_60551090的博客 961

Vibe Coding 工具实战案例全解:Cursor、Claude Code、Codex 真实项目 30 分钟到 4 小时快速构建指南(2026 年最新)

2026年VibeCoding工具实战案例精选:1)使用Cursor在30分钟内构建现代TodoList应用(Next.js+TS+Tailwind);2)通过ClaudeCode纯终端2小时开发3D飞行射击游戏(Three.js+R3F);3)利用OpenAICodex多Agent并行4小时完成SaaS全栈开发(Next.js+Supabase+Stripe)。案例均来自真实项目,覆盖从入门到生产级开发,重点展示:自然语言Prompt技巧、迭代反馈方法、工具特性对比(Cursor可视化最佳/Claude推

hy行者勇哥的博客 3174

十.镜头知识之畸变问题

对于理想光学系统,在一对共轭的物像平面上,像的放大率是一个常数。但是对于实际的光学系统,当视场较大或很大时,像的放大率就要随视场而异,这样就会使像相对于物体失去相似性。这种使像变形的成像缺陷称为畸变。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2124

【后端结合】新程序猿笔记Day15(商品分类实现)(京淘项目)

1. 商品分类实现 1.1 优化商品分类列表 1.1.1 优化策略 数据结构: Map<parentId, 当前父级下的子级> 例子: Map<0, 所有的一级菜单> Map<一级ID, 当前一级下的二级菜单> Map<二级ID, 当前二级下的三级菜单> 设计的优势: 如果将数据保存到Map集合中,则可以有效的降低数据库的访问的次数. 提高查询效率. 1.1.2 封装Map集合 /** * 思路: * 1.判断.

小白猿想成为Simba 898

xtop:multi_driven_net与incomplete_timing_cell fail reason 分析

man multi_driven_net”可以得知,这个问题是multi driven结构引起的,使用命令“get_failed_pins -reason multi_driven_net”,获取violation pin。“man incomplete_timing_cell”可以得知,这个fail reason的原因是缺少timing library cell,检查并补全后这个错误就显示了。这里选择的解决方法是修改lib文件,把inout改成input,重新lib2idb。通过这种方法解决了问题。

m0_61544122的博客 567

CGB2107-Day13-商品分类实现

1.完成商品分类CURD操作 2.分页查询/3级菜单嵌套 3.商品分类新增 修改/删除

qq_16804847的博客 8393

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Day22_5_12 三级分类 - 商品服务 - 谷粒商城(后端部分)

三级分类 1、基本概念 目前做成的后台界面展示 2、三级分类的商品表结构 3、代码编写(主要是后端的) 3.1 商品数据查询-封装成树形结构 com.atguigu.gulimall.product.controller.CategoryController代码编写 /** * 查出所有分类以及子分类,以树形结构组装 */ @RequestMapping("/list/tree") public R list() { List&l

计算机小菜鸟 417

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

产品分类html5代码,HTML5元素分类(示例代码)

HTML5新增了27个元素,废弃了16个元素,根据现有的标准规范,把HTML5的元素按优先级定义为结构性属性、级块性元素、行内语义性元素和交互性元素4大类。1.结构性元素结构性元素主要负责web上下文结构的定义section:在web页面应用中,该元素也可以用于区域的章节描述。header:页面主体上的头部,header元素往往在一对body元素中。footer:页面的底部(页脚),通常会标出网站...

weixin_30803379的博客 548

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JavaWeb - 小米商城 :首页商品分类展示

JavaWeb - 小米商城 :首页商品分类展示 1.功能描述 2.功能分析 分类展示功能在逻辑上并不复杂:每当需要加载 <header> 标签中的内容时,都会向后端提交一个 GET 请求来获取分类数据内容。后端在收到请求后查询数据库并以 json 形式返回展示内容。 查询商品分类内的功能需要面向数据库中的另一张表 tb_goods_type,为了区分不同类型的数据查询业务以及代码的维护性和扩展性。在开发时基于三层架构体系建立对应的GoodsTypeServlet 类、GoodsTypeSe

qq_52029763的博客 2318

商品分类(三)-填充左侧菜单-一级菜单分类布局渲染 & 绑定active标签-选中菜单分类高亮显示 & 引用封装的less样式文件

左侧菜单渲染 实现左侧菜单布局 进行数据填充 控制菜单选中高亮 <div class="left"> <div :key='item.cat_id' v-for='item in listData' :class='["menu-item", currentIndex==item.cat_id?"active":""]'>{{item.cat_name}}</div> </div> 实例 左侧一级菜单-分类和单品类高亮显示 结构 高亮显示效果:采

weixin_44867717的博客 1272

电商网站首页商品分类列表功能实现

首先我们看下这个功能实现的效果: 后期理解补充: 其实这个功能的关键点就是分析这个模块的数据格式怎么样的? 对于这种商品列表展示的功能: 我们思路如下: 第一:开始展示的都是顶级列表,即parentId为0,即每页父类,他就是最顶级的。 第二:根据数据格式分析各级的区别:顶级与二级的区别,二级与三级的区别(这些区别就是在写代码时候的条件约束) 第三:子列表包含子列表,这里使用递归调用。即将根据本身...

weixin_34334744的博客 3138

商品分类表html写法,商品分类列表页.html

商品分类列表页#box,h,a{margin: 0; padding: 0; text-decoration: none;}#box{border: orange 2px solid;width: 200px;font-size: 22px;font-weight: 500;text-indent: 54px;margin: 0 auto;border-radius: 14px;}#box p a...

weixin_42410317的博客 2571
上一篇: 图书购买系统之注册页面--实现实时验证
下一篇: 图书购买系统之本地添加购物车(完善版)--实现生成订单和子订单
Java_jfei
博客等级 码龄10年 55粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值