Javaweb项目——蛋糕店(jsp Servlet)——分页数据模型

分页数据模型

在点击商品分类的各种种类的时候,需要展示各种分类下的商品信息,这时候我们需要创建一个分页的数据模型。

里面包括:
当前的页数
每一页显示多少条数
总记录数
总页数

还需要有一个集合,里面放置所以的goods

page model如下:

package com.sikiedu.model;

import java.util.List;

//分页的数据模型
public class Page {
	
	private int pageNo;//当前是第几页
	private int pageSize;//每一页显示多少条数据
	private int totalCount;//总记录数 数据总个数
	private int totalPage;//总页数
	
	private List<Object> list;
	
	public void setPageSizeAndTotalCount(int pageSize,int totalCount) {
		//每页显示多少个      总记录数
		this.pageSize=pageSize;
		this.totalCount=totalCount;
		totalPage=(int) Math.ceil((double)totalCount/pageSize);
	}
	


	public int getPageNo() {
		return pageNo;
	}



	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}



	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public List<Object> getList() {
		return list;
	}

	public void setList(List<Object> list) {
		this.list = list;
	}
	
}

通过servlet得到id 和pageNo ,通过id 和pageNo得到分页的数据模型,放进request里面。
下面是商品列表的servlet:

package com.sikiedu.servelt;

import java.io.IOException;
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.sikiedu.model.Goods;
import com.sikiedu.model.Page;
import com.sikiedu.model.Type;
import com.sikiedu.service.GoodsService;
import com.sikiedu.service.TypeService;

/**
 * Servlet implementation class GoodsListServlet
 */
@WebServlet("/goods_list")
public class GoodsListServlet extends HttpServlet {
	private GoodsService gService=new GoodsService();//为了调用Service
    private TypeService tService=new TypeService();
   
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		int id=0;
		if(request.getParameter("id")!=null) {
			id=Integer.parseInt(request.getParameter("id"));
		}
		
		int pageNo=1;
		if(request.getParameter("pageNo")!=null) {
			pageNo=Integer.parseInt(request.getParameter("pageNo"));
		}
		
//		List<Goods> list=gService.selectGoods(id, pageNo, 8);
//		request.setAttribute("list", list);
		
		Page p=gService.getGoodsPage(id, pageNo);
		request.setAttribute("p", p);
		request.setAttribute("id", id);
		Type t=null;
		if(id!=0) {
			t=tService.Select(id);
		}
		request.setAttribute("t", t);
		
		request.getRequestDispatcher("/goods_list.jsp").forward(request, response);
	}



}

分类的过程中,头部的类型,在各个页面都需要显示,所以我们可以放在Application里面,在Application创建的时候就将各个列表的信息存入进去,所以创在监听器的包里面。

package com.sikiedu.listener;
/**
 * 
 * 整个页面在显示的时候都需要商品列表的显示,所以这个属性可以放在Application里面,在所有的页面都可以查询到
 * 放在servlet里面比较麻烦,每次都请求,所有之间放在Application里面
 * 
 * 
 */

import java.util.List;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import com.sikiedu.model.Type;
import com.sikiedu.service.TypeService;

/**
 * Application Lifecycle Listener implementation class ApplicationListener
 *
 */
@WebListener
public class ApplicationListener implements ServletContextListener {

	private TypeService tService=new TypeService();//用它去查询
	
	
	/**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent arg0)  { 
         // TODO Auto-generated method stub
    }

	/**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent arg0)  { 
    	List<Type> list=tService.selectAll();
    	arg0.getServletContext().setAttribute("typeList", list);//将类型放在Application里面
    
    }
	
}

分页查询数据库的操作
limit分页公式:PageNo是当前第几页;pageSize是一页多少条记录
limit (PageNo-1)*pageSize,pageSize

	//分页查询商品
		public List<Goods> selectGoods(int typeId,int pageNo,int pageSize) throws SQLException{
			QueryRunner r=new QueryRunner(DBUtil.getDataSource());
			if(typeId==0) {
				String sql="select * from goods limit ?,?";
				return r.query(sql, new BeanListHandler<Goods>(Goods.class),(pageNo-1)*pageSize,pageSize);
			}else {
				String sql="select * from goods where type_id=? limit ?,?";
				return r.query(sql, new BeanListHandler<Goods>(Goods.class),typeId,(pageNo-1)*pageSize,pageSize);
				
			}
		}

在商品列表页面jsp显示的时候,使用foreach遍历显示

<h2><c:choose><c:when test="${empty t }" >全部系列</c:when><c:otherwise>${t.name }</c:otherwise></c:choose></h2>
					
			<div class="col-md-12 product-model-sec">
			
			
			<c:forEach items="${p.list }" var="g">
			
			<div class="product-grid">
						<a href="${pageContext.request.contextPath }/goods_detail?id=${g.id}">				
							<div class="more-product"><span> </span></div>						
							<div class="product-img b-link-stripe b-animate-go  thickbox">
								<img src="${pageContext.request.contextPath }${g.cover}" class="img-responsive" alt="${g.name }" width="240" height="240">
								<div class="b-wrapper">
									<h4 class="b-animate b-from-left  b-delay03">							
										<button>查看详情</button>
									</h4>
								</div>
							</div>
						</a>				
						<div class="product-info simpleCart_shelfItem">
							<div class="product-info-cust prt_name">
								<h4>${g.name }</h4>								
								<span class="item_price">¥ ${g.price }</span>
								<input type="button" class="item_add items" value="加入购物车" onclick="buy(6)">
								<div class="clearfix"> </div>
							</div>												
						</div>
					</div>
			
			</c:forEach>

在进行上下页的时候也用el和jstl相结合判断逻辑即可

<a class='btn btn-info'  <c:if test="${p.pageNo==1 }">disabled</c:if> <c:if test="${p.pageNo!=1 }">href="${pageContext.request.contextPath }/goods_list?pageNo=1&id=${id}</c:if> ">首页</a>
<a class='btn btn-info'  <c:if test="${p.pageNo==1 }">disabled</c:if> <c:if test="${p.pageNo!=1 }">href="${pageContext.request.contextPath }/goods_list?pageNo=${p.pageNo-1 }&id=${id}</c:if> ">上一页</a>
<h2 style='display:inline;'>[${p.pageNo }/${p.totalPage }]</h2>
<h2 style='display:inline;'>[${p.totalCount }]</h2>
<a class='btn btn-info' <c:if test="${p.totalPage==0||p.pageNo==p.totalPage }">disabled</c:if> <c:if test="${p.pageNo!=p.totalPage }">href="${pageContext.request.contextPath }/goods_list?pageNo=${p.pageNo+1}&id=${id}"</c:if>>下一页</a>
<a class='btn btn-info' <c:if test="${p.totalPage==0||p.pageNo==p.totalPage }">disabled</c:if> <c:if test="${p.pageNo!=p.totalPage }">href="${pageContext.request.contextPath }/goods_list?pageNo=${p.totalPage}&id=${id}"</c:if>>尾页</a>
<input type='text' class='form-control' style='display:inline;width:60px;' value=''/><a class='btn btn-info' href='javascript:void(0);' onclick='location.href="${pageContext.request.contextPath }/goods_list?id=${id}&pageNo="+(this.previousSibling.value)'>GO</a>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值