日期:2014-05-16 浏览次数:20474 次
?
上面就是我制作的分页效果
?
(1)首先定义一个分页功能的类:
public class PageVo { /**保存从数据库中读取出的全部数据*/ private List list; /**保存每一页的信息*/ private List pageList=new ArrayList(); /**保存当前页*/ private List pageNow; /**当前的页数*/ private int pageNo=1; /**一共有多少页*/ private int pageMax; /**每一页显示多少条记录*/ private int pageRowNum; public PageVo(List list,int pageRowNum) { this.list=list;//获取到数据库的全部信息 this.pageRowNum=pageRowNum;//获取每一页要显示多少条记录 splitpage();//计算分页算法 getNowList();//取出每一页的数据 } /** * 分页算法,得出最大的页数以及每一页存放的数据 */ public void splitpage() { //得出一共有多少条记录 int size=list.size(); //这个if语句主要是判断取整的问题,如果总得条数除以每一页的显示的条数为0的话 //那么一共可以分为pageMax页,如果不为0,那么要记得加上1, //不然的话就显示不了最后一页的信息了 if(size%pageRowNum==0) { pageMax=size/pageRowNum; } else { pageMax=size/pageRowNum+1; } int index=0; //这里是先取出一页中的要显示的条数放到一个List集合中 //然后再使用List保存每一页 for(int i=0;i<pageMax;i++) { ArrayList tlist=new ArrayList(); //这个循环是保存每一页的信息 for(int j=0;j<pageRowNum;j++) { if(index<size) { tlist.add(list.get(index++)); } else { break; } } //将每一页的信息保存到List集合中 pageList.add(tlist); } } /** * 取出每一页的数据 */ public void getNowList() { int n=pageNo-1; this.pageNow=(ArrayList)pageList.get(n); } /** * 第一页 */ public void setFirstPage() { this.pageNo=1; getNowList(); } /** * 前一页 */ public void setPrivousPage() { if(this.pageNo>1) { this.pageNo--; } getNowList(); } /** * 下一页 */ public void setNextPage() { if(this.pageNo<this.pageMax) { this.pageNo++; } getNowList(); } /** * 最后一页 */ public void setLastPage() { this.pageNo=this.pageMax; getNowList(); } public List getList() { return list; } public void setList(List list) { this.list = list; } public List getPageList() { return pageList; } public void setPageList(List pageList) { this.pageList = pageList; } public List getPageNow() { return pageNow; } public void setPageNow(List pageNow) { this.pageNow = pageNow; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; getNowList(); } public int getPageMax() { return pageMax; } public void setPageMax(int pageMax) { this.pageMax = pageMax; } public int getPageRowNum() { return pageRowNum; } public void setPageRowNum(int pageRowNum) { this.pageRowNum = pageRowNum; } }
? (2)定义好分页功能后,在servlet或我们的struts中分页的过程
/** * 开始进行分页 * @param a表示已经从数据库中取出了全部的信息 * @param pageRowNum每一页要显示的多少条记录 */ @SuppressWarnings("unchecked") public void beginpage(List<Article> a,int pageRowNum) { PageVo pagevo=new PageVo(a,pageRowNum); //得到当前页 int currentpage=pagevo.getPageNo(); //得到总共的页数 int allpage=pagevo.getPageMax(); //得到第一页的信息 List<Article> articles=pagevo.getPageNow(); //记住这里要用session绑定相应的信息 ? session.setAttribute("currentpage", currentpage); session.setAttribute("allpage", allpage); session.setAttribute("articles", articles); session.setAttribute("pagevo", pagevo); }?
(3)在JSP页面中添加如下的功能
<% //currentpage就是当前页,allPages表示的就是一共有多少页。这些在后面都会用到 ?int currentPage = Integer.parseInt(session.getAttribute( "currentpage").toString()); int allPages = Integer.parseInt(session.getAttribute("allpage") .toString()); %>
?(4)一般我们在显示一页信息之后加上如上图所示的分页图标的既在
<c:forEach items="${articles}" var="article">
??????????????????????????????? :
??????????????????????????????? :
</c:forEach>
记得articles吧,它是我们第二步使用session绑定的一个articles。
我们在</c:forEach>后面加上分页数字
//<c:if test="${allpage>1}">allpage是表示一共分几页,这里主要表示是否达到分页, //class="viciao"是一个CSS样式效果主要用在分页显示效果上面