jsp制作分页效果(假分页) 博客分类: Web技术
程序员文章站
2024-03-02 18:44:04
...
上面就是我制作的分页效果
(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样式效果主要用在分页显示效果上面 <c:if test="${allpage>1}"> <div align="right" class="viciao"> <a href="indexmanager!page.action?type=first&id=1"> 首页 </a> <a href="indexmanager!page.action?type=prvious&id=1"> < Prev </a> <% for (int i = currentPage - 2; i <= currentPage + 2 && i <= allPages; i++) { if (currentPage == i) { %> <span class="current"><%=i%></span> <% } else if (i > 0) { %> <a href="indexmanager!page.action?type=<%=i %>&id=1"><%=i%></a> <% } } %> <a href="indexmanager!page.action?type=next&id=1"> Next > </a> <a href="indexmanager!page.action?type=last&id=1"> 尾页 </a> </div> </c:if> </c:if>
在上面中我们还看到有indexmanager!page.action页面跳转,那么看看page这个函数的功能
public String page() { PageVo pagevo=(PageVo) session.getAttribute("pagevo"); //获取分页的类型 String type=request.getParameter("type"); if("prvious".equals(type)) { pagevo.setPrivousPage(); } else if("next".equals(type)) { pagevo.setNextPage(); } else if("first".equals(type)) { pagevo.setFirstPage(); } else if("last".equals(type)) { pagevo.setLastPage(); } else { int pageNo=Integer.parseInt(type); pagevo.setPageNo(pageNo); } List<Article> articles=pagevo.getPageNow(); //得到当前页 int currentpage=pagevo.getPageNo(); session.setAttribute("articles", articles); session.setAttribute("pagevo", pagevo); session.setAttribute("currentpage", currentpage); return "editarticle"; }
page函数主要是根据我们点击的分页数,就是上面显示的1,2,3等等或上一页、下一页、首页、和尾页来获取相应的该也得信息,然后对它进行重新绑定。
最后我这里提供一个分页显示的CSS样式,记住这个要在jsp中引入该css样式,而且在第四步中使用了
<div align="right" class="viciao">
中的viciao就是该css样式,当然在这个样式中还有很多中样式类型
上一篇: java 多条件查询