Java的分页方法

  • 格式:pdf
  • 大小:486.07 KB
  • 文档页数:16

Java分页处理使用Pager-taglib标签库分页————使用作者:李江波QQ:5504704252010年8月10日一、介绍Web开发中分页是必须应用的技术,对查询结果不做分页处理几乎是不可思议的事情。

在Java Web技术中初学者一般会采用SQL语句分页技术,并在这个基础的之上编写分页组件,页面传参数控制层(Servlet或Action)调用分页组件的办法,往往会感觉非常麻烦。

其实在实际开发中我们可采用一些第三方的分页框架,可使分页变的相当简单——Pager-taglib 就是不错的选择。

Pager-taglib实际上是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合支持多种风格的分页显示。

会形成多种不一样的分页页面,风格各异,她自带的DEMO就有七种左右的分页风格,包括Google的分页风格。

而需要订制自已的风格的分页页面也非常简单。

分页方式有两种:第一种是页面分页,适合查询结果不大情况第二种是数据库分页,适合大量查询二、准备Tomcat的2、2配置环境在下载包中找到pager-taglib.jar放到lib目录下(仅此足亦,完全没必要改web.xml什么的,还有官方war包中的东西都可以不要)三、方案一:页面分页页面分页实质是从Servlet或Action中调用业务方法一次性提取所有查询结果并保存,然后跳转页面在页面上通过对pager-taglib.标签库这个集合进行分页处理,因此适合查询数据不大的应用。

3.1控制层代码(这里使用Servelt)public void doGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{ArrayList books=(ArrayList)request.getSession().getAttribute("books");if(books==null){BookService bookService=new BookServiceImpl();//调用业务层功能,获得所有图书列表(业务层的代码大家自己组织)ArrayList<Book>bookList=bookService.getAllBooks();request.getSession().setAttribute("books",bookList);}request.getRequestDispatcher("/list_books.jsp").forward(request,response);}3.2分页标签库的使用3.2.1导入标签库使用taglib指令导入标签库,如下所示://导入分页标签库<%@taglib uri="/tags/navigation/pager"prefix="pg"%>//导入JSTL标签库<%@taglib prefix="c"uri="/jsp/jstl/core"%>这样在页面中就可以使用分页标签了,uri属性值可打开tag-taglib.jar META-INF目录中taglib.tld文件中取得3.2.2页面分页处理在实现list_books.jsp页面分页之前,我们先简单了解一下page-taglib标签的基本结构:<pg:pager>--------------->是分页的根标签,主要进行分页信息的设置<pg:item></pg:item>-->表示一页中的一项,pager标签库可根据这个项的个数来计算分页参数的,通常放在循环中<pg:index>------->表示分页导航,该标签体内设置各种分页导航<pg:first></pg:first>————>分页导航,转向首页<pg:prev></pg:prev>————>分页导航,转向上一页<pg:pages></pg:pages>————>分页导航,转向指定的页面<pg:next></pg:next>----->分页导航,转向下一页<pg:last></pg:last>------>分页导航,转向最后一页</pg:index></pg:pager>使用以上标签就可以完成分页了,很简单吧!下面我们就结合list_book.jsp实例来看看这些标签的用法:(建议先做一下,再仔细体会后面代码的解析)[1]<pg:pager maxPageItems="3"url="list_book.jsp">[2]<table>[3]<c:forEach items="${sessionScope.books}"var="book">[4]<pg:item>[5]<tr>[6]<td>${book.bookName}</td>[7]</tr>[8]</pg:item>[9]</c:forEach>[10]<tr>[11]<td align="center">[12]<pg:index>[13]<pg:first><a href="${pageUrl}">第一页</a></pg:first>[14]<pg:prev><a href="${pageUrl}">上一页</a></pg:prev>[15]<pg:pages>[16]<a href="${pageUrl}">[${pageNumber}]</a>[17]</pg:pages>[18]<pg:next><a href="${pageUrl}">下一页</a></pg:next>[19]<pg:last><a href="${pageUrl}">最后一页</a></pg:last>[20]</pg:index>[21]</td>[22]</tr>[23]</table>[24]</pg:pager>代码说明:[1]:<pg:pager>主要进行分页信息的设置,属性比较多,这里用到如下两个常用属性maxPageItems:显示最多的纪录数/页,实现一页中出现item元素的数量控制url:分页的链接地址(表示当你单击分页导航所转向的页面),pager导航标签会在这个链接的基础上附加分页参数(offset)偏移量[3]:这里使用了JSTL标签迭代books集合,当books迭代完成或循环达到maxPageItems指定的次数则停止循环[4]:表示一页中的一项,maxPageItems=3决定item一页最多出现3次[13]:从当前页导航到第一页。

pageUrl是导航标签输出的变量(存储在当page范围中)pageUrl内容的构成由pager的url属性以及在其后面附加offset参数,该参数的值是导航标签(first、last、next、prev,pages)根据当前页和maxPageItems的值计算出的偏移量,比如:当前页是3、maxPageItems=3,那点击第一页链接那么pager.offset的值是10,这样就导航到第一页了,后面所使用的pageUrl含义是一样的就不重复了[14]:从当前页导航到第上页,没有上一页默认则不出现该导航[15]:这个标签根据分页尺寸循环输出页码信息[16]:pageNumber是pg:pages标签输出的变量,用于存放每次循环的页码号的变量,加上超链接表示到单击这个页码号就可以导航到指定的页面上[18]:从当前页导航到第下页,没有下一页默认则不出现该导航[19]:从当前页导航到第后一页最后经过Servlet转向list_books.jsp执行结果如下:3.2.3实现类似与google的分页效果Google分页效果展示:显示第一页效果(图片取自pager-taglib Demo页面)显示第9页效果可以看出当选择不同的页号,会动态的出现其他页号,这个我们称为二级分页。

适用于查询结果比较多,分页页数也相应比较多的情况,这时我们有必要对分页页号再进行分页显示,如何实现呢?下面我们就将在list_books.jsp的基础上实现二级分页,变化如下:1:将[1]添加两个属性<pg:pagermaxPageItems="3"url="list_book.jsp"maxIndexPages="4"index="center"> maxIndexPages属性表示一次显示最多的分页数,默认是10index设置索引页的动态显示方式,取值为:center(默认值)、forward、half-full这样实际上已经基本就完成了二级分页了,剩下的就是一些样式要求2:首先在[1]添加属性export="currentNumber=pageNumber"export属性作用是让标签给你暴露什么变量,当然这些变量是标签在应用中产生的,不同的标签可暴露的属性是不同的。

如在Pager标签里,可以暴露出来的变量有pageOffset 及pageNumber,即页码偏移量及当前页码,暴露出来的变量被缺省保存在request范围内,可使用scope属性设置其他的存储范围。

如:export="pageNumber,pageOffset"scope="session",表示将pageNumber,pageOffset暴露出来并保存在session范围内。