最新公告
  • 新注册用户请前往个人中心绑定邮箱以便接收相关凭证邮件!!!点击前往个人中心
  • Javaweb网上商城项目实战(18)带分页查看分类下的商品信息

    原理分析

    分析SQL语句实现

    #查看类别cid为1的商品的信息带有分页
    SELECT * FROM product WHERE cid =  1 LIMIT ? ,?
    
    #统计类别为1的商品的数量
    SELECT COUNT(*) FROM product WHERE cid =  1
    

    具体实现

    在header.jsp中修改ajax链接

    
    

    可以看到此时鼠标移动到分类按钮上地址栏已经发生了相应的改变

    引入PageModel分页模块

    引用分页的工具PageModel放到domain包下,作为一个模型。
    PageModel.java

    package com.geekerstar.store.domain;
    
    import java.util.List;
    
    /**
     * 存放分页相关的数据
     *
     */
    public class PageModel {
    	//基本属性
    	private int currentPageNum;//当前页数,由用户指定				*
    	private int pageSize = 5 ;//每页显示的条数,固定的				*
    	private int totalRecords;//总记录条数,数据库查出来的			    *
    	private int totalPageNum;//总页数,计算出来的					*
    	private int startIndex;//每页开始记录的索引,计算出来的			    *
    	private int prePageNum;//上一页							    *
    	private int nextPageNum;//下一页							    *
    	
    	private List records;//已经分好页的结果集,该list中只有10条记录
    	
    	
    	
    	//扩展属性
    	//一共每页显示9个页码按钮
    	private int startPage;//开始页码
    	private int endPage;//结束页码
    	
    	//完善属性
    	private String url;
    	
    	
    
    
    	//要想使用我的分页,必须给我两个参数。一个是要看哪一页,另一个是总记录条数
    	public PageModel(int currentPageNum,int totalRecords,int pageSize){
    		this.currentPageNum = currentPageNum;
    		this.totalRecords = totalRecords;
    		this.pageSize=pageSize;
    		
    		//计算查询记录的开始索引
    		startIndex = (currentPageNum-1)*pageSize;
    		//计算总页数
    		totalPageNum = totalRecords%pageSize==0?(totalRecords/pageSize):(totalRecords/pageSize+1);
    		
    		
    		startPage = currentPageNum - 4; //5
    		endPage = currentPageNum + 4;  //13
    		//看看总页数够不够9页
    		if(totalPageNum>9){
    			//超过了9页
    			if(startPage < 1){
    				startPage = 1;
    				endPage = startPage+8;
    			}
    			if(endPage>totalPageNum){
    				endPage = totalPageNum;
    				startPage = endPage-8;
    			}
    		}else{
    			//不够9页
    			startPage = 1;
    			endPage = totalPageNum;
    		}
    	}
    
    	public String getUrl() {
    		return url;
    	}
    
    	public void setUrl(String url) {
    		this.url = url;
    	}
    	
    	public int getStartPage() {
    		return startPage;
    	}
    
    	public void setStartPage(int startPage) {
    		this.startPage = startPage;
    	}
    
    	public int getEndPage() {
    		return endPage;
    	}
    
    	public void setEndPage(int endPage) {
    		this.endPage = endPage;
    	}
    
    	public int getPrePageNum() {
    		prePageNum = currentPageNum-1;
    		if(prePageNum<1){
    			prePageNum = 1;
    		}
    		return prePageNum;
    	}
    
    	public int getNextPageNum() {
    		nextPageNum = currentPageNum+1;
    		if(nextPageNum>totalPageNum){
    			nextPageNum = totalPageNum;
    		}
    		return nextPageNum;
    	}
    
    	
    	
    	
    	public int getCurrentPageNum() {
    		return currentPageNum;
    	}
    
    
    	public void setCurrentPageNum(int currentPageNum) {
    		this.currentPageNum = currentPageNum;
    	}
    
    
    	public int getPageSize() {
    		return pageSize;
    	}
    
    
    	public void setPageSize(int pageSize) {
    		this.pageSize = pageSize;
    	}
    
    
    	public int getTotalRecords() {
    		return totalRecords;
    	}
    
    
    	public void setTotalRecords(int totalRecords) {
    		this.totalRecords = totalRecords;
    	}
    
    
    	public int getTotalPageNum() {
    		return totalPageNum;
    	}
    
    
    	public void setTotalPageNum(int totalPageNum) {
    		this.totalPageNum = totalPageNum;
    	}
    
    
    	public int getStartIndex() {
    		return startIndex;
    	}
    
    
    	public void setStartIndex(int startIndex) {
    		this.startIndex = startIndex;
    	}
    
    
    	
    
    
    	public void setPrePageNum(int prePageNum) {
    		this.prePageNum = prePageNum;
    	}
    
    
    	
    
    	public void setNextPageNum(int nextPageNum) {
    		this.nextPageNum = nextPageNum;
    	}
    
    
    	public List getRecords() {	
    		return records;
    	}
    
    
    	public void setRecords(List records) {
    		this.records = records;
    	}
    }
    

    在ProductServlet中增加findProductsByCidWithPage方法

    主要实现以下功能:

    获取cid,num

    调用业务层功能:以分页形式查询当前类别下商品信息

    返回PageModel对象(1_当前页商品信息2_分页3_url)

    将PageModel对象放入request

    转发到/jsp/product_list.jsp

    // findProductsByCidWithPage
    public String findProductsByCidWithPage(HttpServletRequest request, HttpServletResponse response) throws Exception {
    
    	// 获取cid,num
    	String cid = request.getParameter("cid");
    	int curNum = Integer.parseInt(request.getParameter("num"));
    	// 调用业务层功能:以分页形式查询当前类别下商品信息
    	// 返回PageModel对象(1_当前页商品信息2_分页3_url)
    	ProductService ProductService = new ProductServiceImp();
    	PageModel pm = ProductService.findProductsByCidWithPage(cid, curNum);
    	// 将PageModel对象放入request
    	request.setAttribute("page", pm);
    	// 转发到/jsp/product_list.jsp
    	return "/jsp/product_list.jsp";
    }
    

    依次实现findProductsByCidWithPage

    在ProductService中添加

    PageModel findProductsByCidWithPage(String cid, int curNum)throws Exception;
    

    在ProductServiceImp中添加

    @Override
    public PageModel findProductsByCidWithPage(String cid, int curNum) throws Exception {
    	//1_创建PageModel对象 目的:计算分页参数
    	//统计当前分类下商品个数  select count(*) from product where cid=?
    	int totalRecords=ProductDao.findTotalRecords(cid);
    	PageModel pm=new PageModel(curNum,totalRecords,12);
    	//2_关联集合 select * from product where cid =? limit ? ,?
    	List list=ProductDao.findProductsByCidWithPage(cid,pm.getStartIndex(),pm.getPageSize());
    	pm.setList(list);
    	//3_关联url
    	pm.setUrl("ProductServlet?method=findProductsByCidWithPage&cid="+cid);
    	return pm;
    }
    

    [v_error]这里注意一下:将PageModel中的records改为list[/v_error]

    在ProductDao中添加

    int findTotalRecords(String cid)throws Exception;
    
    List findProductsByCidWithPage(String cid, int startIndex, int pageSize)throws Exception;
    

    在ProductDaoImp中添加

    @Override
    public List findProductsByCidWithPage(String cid, int startIndex, int pageSize) throws Exception {
    	String sql="select * from product where cid=? limit ? , ?";
    	QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
    	return qr.query(sql, new BeanListHandler(Product.class),cid,startIndex,pageSize);
    }
    
    @Override
    public int findTotalRecords(String cid) throws Exception {
    	String sql="select count(*) from product where cid =?";
    	QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
    	Long num=(Long)qr.query(sql, new ScalarHandler(),cid);
    	return num.intValue();
    }
    

    商品列表页面修改

    接下来我们要获取当前类别下的当前页中的分类数据和分页参数

    同样的,和上一节一样,我们把col-md-2类重复的去掉,只剩下一个,并编写循环遍历。顺便把下面的分页模块也去掉

    并引入分页的公共模块

    <%@include file="/jsp/pageFile.jsp" %>
    

    公共模块代码如下,这个可以在我们提供的源码资料包中找到

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    	<%--分页显示的开始 --%>
        	
    共${page.totalPageNum}页/第${page.currentPageNum}页 首页 上一页 <%--显示的页码,使用forEach遍历显示的页面 --%> ${pagenum} 下一页 末页
    <%--分页显示的结束--%>

    这里就有一个情况了,如果我们商品分类列表里没有东西,那么不应该输出商品列表,因此我们就需要对输出商品这段代码处理一下,写一个判断,这部分完整的代码如下所示:

    
    	

    暂无商品信息

    ${p.pname}

    商城价:¥${p.shop_price}

    <%@ include file="/jsp/pageFile.jsp"%>

    效果演示

    运行项目,可以看到,当我们点击分类的时候,会出现分类信息展示以及分页,当该分类下没有商品时,会出现暂无商品信息,但是前端页面还是有少许问题,不过功能上我们已经大体实现了带分页查看分类下的商品信息。

    源码下载

    [dm href=’https://www.jikewenku.com/product/1700.html’]下载地址[/dm]

    导航目录

    [dm href=’https://www.jikewenku.com/project/2786.html’]查看导航[/dm]

    本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
    极客文库 » Javaweb网上商城项目实战(18)带分页查看分类下的商品信息

    常见问题FAQ

    如果资源链接失效了怎么办?
    本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
    如果用户分享的资源与描述不符怎么办?
    可以联系客服QQ:2580505920,如果要求合理可以安排退款或者退赞助积分。
    如何分享个人资源获取赞助积分或其他奖励?
    本站用户可以分享自己的资源,但是必须保证资源没有侵权行为。点击个人中心,根据操作填写并上传即可。资源所获收益完全归属上传者,每周可申请提现一次。
    如果您发现了本资源有侵权行为怎么办?
    及时联系客服QQ:2580505920,核实予以删除。

    参与讨论

    • 155会员总数(位)
    • 3735资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 382稳定运行(天)

    欢迎加入「极客文库」,成为原创作者从这里开始!

    立即加入 了解更多
    成为赞助用户享有更多特权立即升级