JSP分页

一、分页逻辑

package com.ccit.tools;

import java.util.List;

public class PageDiv<T> {
	private int pageNo; //当前页码
	private int pageSize; //每一页所要显示的条目数
	private int totalNo; //记录总数
	private int totalPage; //总页数
	private List<T> list; //一页数据
	private int begin; //开始页码
	private int end; //结束页码
	private int listNo; //显示的页码数
	
	public PageDiv(){}
	
	public PageDiv(int pageNo,int pageSize,int totalNo,List<T> list) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		this.totalNo = totalNo;
		totalPage=(this.totalNo+this.pageSize-1)/this.pageSize;
		this.list = list;
		
		listNo = 7;

		if(listNo % 2 == 0) { //页码数为偶数时
			if(pageNo>=(listNo/2+1)) {
				begin = pageNo-listNo/2;
				end = pageNo + listNo/2 -1;
				if(end>totalPage) {
					end = totalPage;
					if((end - begin + 1) < listNo) {
						begin = end - listNo +1;
					}
				}
			}else {
				begin = 1;
				end = listNo;
				if(end>totalPage) {
					end = totalPage;
					if((end - begin + 1) < listNo) {
						begin = end - listNo +1;
					}
				}
			}
		}else {//页码数为奇数时
			if(pageNo >= (listNo+1)/2) {
				begin = pageNo - (listNo + 1)/2 +1;
				end = pageNo + (listNo + 1)/2 -1;
				if(end > totalPage) {
					end = totalPage;
					if((end - begin + 1) < listNo) {
						begin = end - listNo +1;
					}
				}
			}else {
				begin = 1;
				end = listNo;
				if(end>totalPage) {
					end = totalPage;
					if((end - begin + 1) < listNo) {
						begin = end - listNo +1;
					}
				}
			}
		}
		
	}
	public PageDiv(int pageNo,int pageSize) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
	}
	
	public int getBegin() {
		return begin;
	}

	public void setBegin(int begin) {
		this.begin = begin;
	}

	public int getEnd() {
		return end;
	}

	public void setEnd(int end) {
		this.end = end;
	}

	public int getListNo() {
		return listNo;
	}

	public void setListNo(int listNo) {
		this.listNo = listNo;
	}

	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 getTotalNo() {
		return totalNo;
	}
	public void setTotalNo(int totalNo) {
		this.totalNo = totalNo;
	}
	public int getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public List<T> getList() {
		return list;
	}
	public void setList(List<T> list) {
		this.list = list;
	}
}

 二、从数据库取一页数据

 

关键是 sql2 的写法

/*取留言的方法,传入的是要显示的页码 和 每一页要显示的留言数*/
public PageDiv<Message> getAll(int pageNo, int pageSize) {
		String sql1="select count(id) from t_msg";
		String sql2="select * from t_msg order by id desc limit "+((pageNo-1)*pageSize)+","+pageSize;
		int totalNo=this.template.getRowCount(sql1);
		List<Message> list = this.template.executeQuery(sql2, new MsgRowMapper());//此为调用封装的模板类,在另一篇笔记里有详细代码
		return new PageDiv<Message>(pageNo,pageSize,totalNo,list);
	}

 三、servlet传值

//MessageDao既为对数据库的操作类实现的接口,根据自己的设计调整
MessageDao md = (MessageDao)DaoFactory.getDao("MessageDao");
//在此处能够获得数据返回给pd即可,改为自己的方法
PageDiv<Message> pd = null;
pd = md.getAll(pageNo, 2);//每页两条记录
session.setAttribute("pagediv", pd);
response.sendRedirect("showmsg.jsp");

 四、JSP页面

........

<%  
  
List<Message> list = pd.getList();  
if(null != list){  
    for(int i=0;i<list.size();i++){  
        Message m = list.get(i);  
%>  
<div class="XX">  
<%out.print(m.getContent());%>  
</div>  
<%} }%>

........
<ul>
			<%
			int pageNo = pd.getPageNo();
			int pageSize = pd.getPageSize();
			int totalNo = pd.getTotalNo();
			int totalPage = pd.getTotalPage();
			int listbegin = pd.getBegin();
			int listend = pd.getEnd();
			%>
			<li id="numberinfo">当前第<font color="#FF0000"><%=pageNo %>/<%=totalPage %></font>页&nbsp;共<font color="#FF0000"><%=totalNo %></font>条记录&nbsp;每页显示<font color="#FF0000"><%=pageSize %>条信息</font></li>
			<li><%
			if(pageNo<=1){%>
			<font style="font-weight:bold">&lt;&lt;</font>
			<%
			}else{%><a href="showindex?pageNo=<%
				out.print(pageNo-1);
			%>"><font style="font-weight:bold">&lt;&lt;</font></a>
			<%} %>
			</li>
			<%
			for(int i = listbegin; i <= listend; i++){
				if(i!=pageNo) {
			%>
			<li><a href="showindex?pageNo=<%=i%>"><%
			out.print("[");
			out.print(i);
			out.print("]");
			%></a></li>
			<%}else{%>
				<li>[<%out.print(i); %>]</li>
			<%}
				
			}%>
			<li><%
			if(pageNo>=totalPage){%>
			<font style="font-weight:bold">&gt;&gt;</font>
			<%
			}else{%><a href="showindex?pageNo=<%
				out.print(pageNo+1);
			
			%>"><font style="font-weight:bold">&gt;&gt;</font></a>
			<%} %>
			</li>
		</ul>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值