比较简单的pager-taglib-2.0分页

来源:互联网 发布:vc2010编写c语言程序 编辑:程序博客网 时间:2024/05/05 02:51
找了很多jsp在ssh中的分页技术,发现使用标签库的这套是比较简单的,但代码量依旧不少……
为一张表增加个分页栏有时候需要在三个类上动刀……
增加Action后自然要修改xml……
比起.net的控件,这可真的真的狠麻烦……
 

使用pager-taglib

将下载的压缩包解压后:将下列文件对应于我们项目中的文件.

WEB-INF/lib/
pager-taglib.jar

新建PageModel类以及修改DAO接口

①PageModel.java

  1. import java.util.List;
  2. public class PageModel {
  3. /**
  4. * 总记录数
  5. * */
  6. private int total;
  7. /**
  8. * 当前页的记录集
  9. * */
  10. private List datas;
  11. public int getTotal() {
  12. return total;
  13. }
  14. public void setTotal(int total) {
  15. this.total = total;
  16. }
  17. public List getDatas() {
  18. return datas;
  19. }
  20. public void setDatas(List datas) {
  21. this.datas = datas;
  22. }
  23. }

②修改DAO,增加public PageModel findAllAlarm(int offset, int pagesize)方法,以及实现类. AlarmDao.java

  1. public interface AlarmDao {
  2. public void add(Alarm alarm);
  3. public Alarm getAlarm(Integer id);
  4. public List getAlarmList();
  5. public void update(Alarm alarm);
  6. public void delete(Integer id);
  7. /**
  8. *
  9. * @param offset 从第几条记录开始查询
  10. * @param pagesize 每页显示多少条记录
  11. * @return
  12. */
  13. public PageModel findAllAlarm(int offset, int pagesize);
  14. }

③实现接口中方法:AlarmDaoImpl.java

  1. public PageModel findAllAlarm(int offset, int pagesize) {
  2. //得到总记录数
  3. String queryCountHql = "select count(*) from Alarm";
  4. Query query = getSession().createQuery(queryCountHql);
  5. int total = ((Long)query.uniqueResult()).intValue();
  6. List datas = getSession().createQuery("from Alarm")
  7. .setFirstResult(offset)
  8. .setMaxResults(pagesize)
  9. .list();
  10. //得到结果集
  11. PageModel pm = new PageModel();
  12. pm.setTotal(total);
  13. pm.setDatas(datas);
  14. return pm;
  15. }

④.Services层:public PageModel findAllAlarm(int offset, int pagesize);

⑤Services其实现:AlarmManagerImpl.java

  1. public PageModel findAllAlarm(int offset, int pagesize) {
  2. // TODO Auto-generated method stub
  3. return alarmDao.findAllAlarm(offset, pagesize);
  4. }

四.修改Action,增加分页方法!

  1. public String pagerTaglib()
  2. {
  3. int pagesize=3;
  4. int offset=0;
  5. HttpServletRequest request = ServletActionContext.getRequest();
  6. if(request.getParameter("pager.offset")!=null)
  7. offset=Integer.parseInt(request.getParameter("pager.offset"));
  8. PageModel pm=alarmManager.findAllAlarm(offset, pagesize);
  9. request.setAttribute("pm", pm);
  10. return "pagertaglib";
  11. }

修改struts.xml文件

  1. <action name="pagerTaglib" class="addBean" method="pagerTaglib">
  2. <result name="success">/list.jsp</result>
  3. <result name="pagertaglib">/page.jsp</result>
  4. </action>

五.建立JSP测试页面:page.jsp

注意导入:

JSTL标签:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
pagertaglib标签:

<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. <title>测试 分页</title>
  8. </head>
  9. <body>
  10. <h1>测试 分页</h1>
  11. <hr/>
  12. <table width="778" border="0" cellPadding="0" cellSpacing="1" bgcolor="#6386d6">
  13. <tr bgcolor="#EFF3F7">
  14. <TD align="center">ID</TD>
  15. <TD align="center">内容</TD>
  16. <TD align="center">时间</TD>
  17. <TD align="center">相关操作</TD>
  18. </tr>
  19. <c:if test="${!empty pm.datas}">
  20. <c:forEach items="${pm.datas}" var="alarm">
  21. <tr bgcolor="#EFF3F7">
  22. <td align="center">${alarm.wid }</td>
  23. <td align="center">${alarm.wcontent }</td>
  24. <td align="center">${alarm.wtime}</td>
  25. <td align="center">
  26. 修改
  27. 删除</td>
  28. </tr>
  29. </c:forEach>
  30. </c:if>
  31. <c:if test="${empty pm.datas}">
  32. <tr>
  33. <td colspan="5" align="center" bgcolor="#EFF3F7">
  34. 没有找到相应的记录
  35. </td>
  36. </tr>
  37. </c:if>
  38. </table>
  39. <pg:pager url="pagerTaglib!pagerTaglib" items="${pm.total}" export="currentPageNumber=pageNumber" maxPageItems="3">
  40. <pg:first>
  41. <a href="${pageUrl}">首页</a>
  42. </pg:first>
  43. <pg:prev>
  44. <a href="${pageUrl }">上一页</a>
  45. </pg:prev>
  46. <pg:pages>
  47. <c:choose>
  48. <c:when test="${currentPageNumber eq pageNumber}">
  49. <font color="red">${pageNumber }</font>
  50. </c:when>
  51. <c:otherwise>
  52. <a href="${pageUrl }">${pageNumber }</a>
  53. </c:otherwise>
  54. </c:choose>
  55. </pg:pages>
  56. <pg:next>
  57. <a href="${pageUrl }">下一页</a>
  58. </pg:next>
  59. <pg:last>
  60. <a href="${pageUrl }">尾页</a>
  61. </pg:last>
  62. </pg:pager>
  63. </body>
  64. </html>

pager-taglib标签库使用:

标签名:简介:参数说明:pg:pager设置分页的总体参数url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
items:总记录数,pager标签正是根据这个值来计算分页参数的
maxPageItems:每页显示的行数,默认为10(不写此标签,你会发现分页的条数在小于10的时候显示不出来一些数据。当大于10的时候则会出现重复的记录!)
maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10pg:first第一页的标签export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 首页第一行的索引值
lastItem - 首页最后一行的索引值pg:pre上一页标签export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 前页第一行的索引值
lastItem - 前页最后一行的索引值pg:next下一页标签export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 下页第一行的索引值
lastItem - 下页最后一行的索引值pg:last最后一页export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 尾页第一行的索引值
lastItem - 尾页最后一行的索引值

pg:pages循环输出页码信息export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - pageNumber这个页码指定的那一页的第一行的索引值
lastItem - pageNumber这个页码指定的那一页的最后一行的索引值

六.结果如图:

页面有点难看,这些数据是PowerDesigner生成的测试数据,很难看,呵呵。

至此使用pager-taglib-2.0进行分页就已经完成了!下面上传了文件及Demo.

项目源程序如下,可以直接导入Myeclipse8.6

http://down.51cto.com/data/347159

本文出自 “幽灵柯南的技术blog” 博客,请务必保留此出处http://enetq.blog.51cto.com/479739/622946

原创粉丝点击