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

找了很多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.jspresult>
  3. <result name="pagertaglib">/page.jspresult>
  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. >
  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">IDTD>
  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:在循环输出页码的时候,最大输出多少个页码,默认是10
pg: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

你可能感兴趣的:(java)