pagertaglib分页处理的使用.docx
- 文档编号:9948754
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:21
- 大小:20.51KB
pagertaglib分页处理的使用.docx
《pagertaglib分页处理的使用.docx》由会员分享,可在线阅读,更多相关《pagertaglib分页处理的使用.docx(21页珍藏版)》请在冰豆网上搜索。
pagertaglib分页处理的使用
pager-taglib是java中一个用于分页的小的框架。
下面简单介绍一下它的具体使用。
一、环境的搭建:
将pager-taglib-2.0.war包拷贝到Tomcat的webapps下。
启动Tomcat后会将其解压成pager-taglib-2.0文件夹。
从解压文件中的lib目录下拷贝pager-taglib.jar包到项目的lib下。
在JSP页面中使用taglib指令引入pager-taglib标签库。
二、重要参数的说明:
Offset:
传过来的值是偏移量,是选择的页面的页数。
比如你的记录/页pageSize=3,那么传过来的offset应该如下处理:
offset/3+1 这样得到的就是要生成的页数!
pg:
pager设置分页的总体参数
url:
分页的链接根地址,pager标签会在这个链接的基础上附加分页参数,但不允许像给页面跳转的url那样,在后面直接添加参数,而参数的传递时需要使用pg:
param来指定。
items:
总记录数,pager标签正是根据这个值来计算分页参数,很重要。
maxPageItems:
每页显示的行数,默认为10
maxIndexPages:
在循环输出页码的时候,最大输出多少个页码,默认是10
pg:
first第一页的标签
pg:
pre上一页标签
pg:
next下一页标签
pg:
last最后一页标签
pg:
pages循环输出页码信息
对于上面的标签都有类似的export变量:
pageUrl-分页链接URL地址(最重要的export参数)
pageNumber-页码
firstItem–对应页第一行的索引值
lastItem-对应页最后一行的索引值
三、项目中使用pager-taglib:
1、引入对应的标签库:
[html] viewplaincopy
1. 18px"><%@taglibprefix="pg" uri=" 2. 3.<%@ taglib prefix="c" uri=" %>
2、使用标签布置页面:
[html] viewplaincopy
1. pager url="org.do"items="${pm.total}"export="currentPageNumber=pageNumber"> 2. 3. paramnamepg: paramname="parentId"/> 4. 5. first> 6. 7. 8. 9. first> 10. 11. prev> 12. 13. 14. 15. prev> 16. 17. pages> 18. 19. choose> 20. 21. whentestc: whentest="${currentPageNumber eq pageNumber }"> 22. 23. 24. 25. when> 26. 27. otherwise> 28. 29. 30. 31. otherwise> 32. 33. choose> 34. 35. pages> 36. 37. next> 38. 39. 40. 41. next> 42. 43. last> 44. 45. 46. 47. last> 48. 49. pager> 需要注意的是: 很多时候,在不同的页面中跳转的时候,需要传递一个id,在保持这个数据的时候,不能直接跟在url后面,需要使用 paramname="parentId"/>来传递。 为了给当前页添加一些特殊的效果,使用currentPageNumber给pageNumber指定了一个别名,这是为了test="${currentPageNumbereqpageNumber}判断的需要。 Items表示: 返回来的总记录数,由此,该框架采用的是假分页。 url: 指明了请求的入口地址,是与struts的配置文件struts-config.xml中的配置相关联。 3、设置offset和pagesize变量的值: 比较好的做法是在系统变量类中,将其设置到ThreadLocal变量中。 这里将其封装到了SystemContext类中: [java] viewplaincopy 1. 18px">public class SystemContext { 2. 3. privatestatic ThreadLocal offset = new ThreadLocal(); 4. 5. privatestatic ThreadLocal pagesize = new ThreadLocal(); 6. 7. 8. publicstatic int getOffset(){ 9. 10. Integeros = (Integer)offset.get(); 11. 12. if(os== null){ 13. 14. return0; 15. } 16. returnos; 17. } 18. 19. 20. publicstatic void setOffset(int offsetvalue){ 21. 22. offset.set(offsetvalue); 23. 24. } 25. 26. 27. publicstatic void removeOffset(){ 28. offset.remove(); 29. } 30. 31. 32. publicstatic int getPagesize(){ 33. 34. Integerps = (Integer)pagesize.get(); 35. 36. if(ps== null){ 37. 38. returnInteger.MAX_VALUE; 39. 40. } 41. 42. returnps; 43. 44. } 45. 46. 47. publicstatic void setPagesize(int pagesizevalue){ 48. 49. pagesize.set(pagesizevalue); 50. } 51. 52. 53. publicstatic void removePagesize(){ 54. 55. pagesize.remove(); 56. } 57. 58. 59.} 4、定义分页过滤器PagerFilter: 该过滤器调用SystemContext类的方法,给offset和pagesize变量赋值。 [java] viewplaincopy 1. 18px">publicclass PagerFilter implements Filter { 2. 3. 4. @Override 5. 6. publicvoid destroy() { 7. 8. } 9. 10. @Override 11. 12. publicvoid doFilter(ServletRequest request, ServletResponseresponse, 13. 14. FilterChain chain) throws IOException, ServletException{ 15. 16. 17. HttpServletRequest httpRequest = (HttpServletRequest)request; 18. 19. SystemContext.setOffset(getOffset(httpRequest)); 20. 21. SystemContext.setPagesize(getPagesize(httpRequest)); 22. 23. 24. try{ 25. 26. chain.doFilter(request, response); 27. 28. }finally{ 29. 30. //清空ThreadLocal中的值 31. 32. SystemContext.removeOffset(); 33. 34. SystemContext.removePagesize(); 35. 36. } 37. 38. } 39. 40. 41. protectedint getOffset(HttpServletRequest request){ 42. 43. int offset = 0; 44. 45. try { 46. 47. offset = Integer.parseInt(request.getParameter("pager.offset")); 48. 49. } catch (NumberFormatException ignore) { 50. 51. } 52. 53. return offset; 54. 55. } 56. 57. 58. protectedint getPagesize(HttpServletRequest request){ 59. 60. return 10; 61. 62. } 63. 64. @Override 65. 66. publicvoid init(FilterConfig arg0) throws ServletException { 67. 68. } 69. 70.} offset=Integer.parseInt(request.getParameter("pager.offset"));中的参数是固定的。 5、将过滤器配置到web.xml文件中,使之生效: [html] viewplaincopy 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 6、定义封装不同实体类数据的分页类PagerModel: 该类使用List封装了返回的不同实体类型。 这里如果使用泛型,可以在编程的时候检查类型及早给出提示,不使用也是可以的,根据个人的编程习惯吧。 [java] viewplaincopy 1.publicclass PagerModel{ 2. 3. 4. /** 5. 6. * 总记录数 7. 8. */ 9. 10. privateinttotal; 11. 12. 13. 14. /** 15. 16. * 当前页结果集 17. 18. */ 19. 20. private List datas; 21. 22. 23. public List getDatas() { 24. 25. returndatas; 26. 27. } 28. 29. 30. publicvoid setDatas(List datas) { 31. 32. this.datas = datas; 33. 34. } 35. 36. 37. publicint getTotal() { 38. 39. returntotal; 40. 41. } 42. 43. publicvoid setTotal(int total) { 44. 45. this.total = total; 46. 47. } 48. 49.} 7、抽象分页服务类AbstractManager: 在业务逻辑的实现类中,只是传入的查询语句和参数不同,所以,可以对这个变化的部分抽象。 [java] viewplaincopy 1.publicclass AbstractManager extends HibernateDaoSupport { 2. 3. 4. /** 5. 6. * 私有的给查询语句赋值的方法 7. 8. * @param query 9. 10. * @param hql 11. 12. * @param params 13. 14. */ 15. 16. publicvoid setParams(Query query,String hql,Object[] params){ 17. 18. if(params! =null && params.length>0){ 19. 20. for(int i =0;i 21. 22. query.setParameter(i, params[i]); 23. 24. } 25. 26. } 27. 28. } 29. 30. 31. 32. //*****************************************分页公共方法开始***************************************** 33. 34. 35. public PagerModel searchPaginated(String hql){ 36. 37. return searchPaginated(hql,null,SystemContext.getOffset(),SystemContext.getPagesize()); 38. } 39. 40. 41. public PagerModel searchPaginated(String hql,Object param){ 42. 43. return searchPaginated(hql,new Object[]{param},SystemContext.getOffset(),SystemContext.getPagesize()); 44. 45. } 46. 47. 48. public PagerModel searchPaginated(String hql,Object[] params){ 49. 50. return searchPaginated(hql,params,SystemContext.getOffset(),SystemContext.getPagesize()); 51. 52. } 53. 54. 55. public PagerModel searchPaginated(String hql,int offset,int pagesize){ 56. 57. return searchPaginated(hql,null,offset,pagesize); 58. 59. } 60. 61. 62. public PagerModel searchPaginated(String hql,Object obj,int offset,int pagesize){ 63. 64. return searchPaginated(hql,new Object[]{obj},offset,pagesize); 65. 66. } 67. 68. 69. 70. /** 71. 72. * 根据HQL语句进行分页查询 73. 74. * @param hql HQL语句 75. 76. * @param params HQL语句带的多个参数值 77. 78. * @param offset 从第几条记录开始查询 79. 80. * @param pagesize 每页显示多少行 81. 82. * @return 83. 84. */ 85. public PagerModel searchPaginated(String hql,Object[] params,int offset,int pagesize){ 86. 87. 88. //获取记录总数 89. 90. String countHql = getCountQuery(hql); 91. 92. Query query = getSession().createQuery(countHql); 93. 94. if(params ! = null && params.length > 0){ 95. 96. for(int i=0; i 97. 98. query.setParamete
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pagertaglib 分页 处理 使用