javaWEB项目实现分页的方法很多,网上也有很多列子,最近工作中S2SH框架项目中需要一个分页的功能,查看了很多用一下方式实现,功能思路很清晰,觉得是很好的一种实现方法,记录下便多学习。

刚开始得到分页循环页数,但增加了跳转功能时,在select下拉框中总是重复循环最大页,通过查看代码修改,最终终于实现。解决思路就是需要增加一个跳转分页的javaBean,目的是封装成一个list,在得到页数后,在页面可以直接通过list的属性获取递增循环页数。

1.javaBean:

pageBean(分页类)

  1. public class PageBean {
  2. private List<实体类类名> list1;            //返回某一页的记录列表
  3. private List<实体类类名> list2;        //返回某一页的记录列表
  4. private int allRow;         //总记录数
  5. private int pageSize;       //每页记录数
  6. private int totalPage;      //总页数
  7. private int currentPage;    //当前页数
  8. private boolean isFirstPage;        //是否为第一页
  9. private boolean isLastPage;         //是否为最后一页
  10. private boolean hasPreviousPage;    //是否有上一页
  11. private boolean hasNextPage;        //是否有下一页
  12. /**
  13. * 初始化分页信息
  14. */
  15. public void init(){
  16. this.isFirstPage=isFirstPage();
  17. this.isLastPage=isLastPage();
  18. this.hasPreviousPage=isHasPreviousPage();
  19. this.hasNextPage=isHasNextPage();
  20. }
  21. /**
  22. * 判断分页信息,只需getter方法
  23. */
  24. public boolean isFirstPage(){
  25. return currentPage==1;
  26. }
  27. public boolean isLastPage(){
  28. return currentPage==totalPage;
  29. }
  30. public boolean isHasPreviousPage(){
  31. return currentPage!=1;
  32. }
  33. public boolean isHasNextPage(){
  34. return currentPage!=totalPage;
  35. }
  36. /**
  37.    * 计算总页数,静态方法,供外部直接通过类名调用
  38.    * @param pageSize 每页记录数
  39.    * @param allRow 总记录数
  40.    * @return 总页数
  41.    */
  42. public static int countTotalPage(final int pageSize,final int allRow){
  43. int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;
  44. return totalPage;
  45. }
  46. /**
  47.   * 计算当前页开始记录
  48.   * @parampageSize每页记录数
  49.   * @paramcurrentPage当前第几页
  50.   * @return当前页开始记录号
  51.   */
  52. public static int countOffset(final int pageSize,final int currentPage){
  53. final int offset = pageSize*(currentPage-1);
  54. return offset;
  55. }
  56. /**
  57.    * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
  58.    * @param page 传入的参数(可能为空,即0,则返回1)
  59.    * @return 当前页
  60.    */
  61. public static int countCurrentPage(int page){
  62. final int curPage = (page==0?1:page);
  63. return curPage;
  64. }
  65. public List<实体类类名> getList1() {
  66. return list1;
  67. }
  68. public void setList1(List<实体类类名> list1) {
  69. this.list1 = list1;
  70. }
  71. public List<实体类类名> getList2() {
  72. return list2;
  73. }
  74. public void setList2(List<实体类类名> list2) {
  75. this.list2 = list2;
  76. }
  77. public int getAllRow() {
  78. return allRow;
  79. }
  80. public void setAllRow(int allRow) {
  81. this.allRow = allRow;
  82. }
  83. public int getPageSize() {
  84. return pageSize;
  85. }
  86. public void setPageSize(int pageSize) {
  87. this.pageSize = pageSize;
  88. }
  89. public int getTotalPage() {
  90. return totalPage;
  91. }
  92. public void setTotalPage(int totalPage) {
  93. this.totalPage = totalPage;
  94. }
  95. public int getCurrentPage() {
  96. return currentPage;
  97. }
  98. public void setCurrentPage(int currentPage) {
  99. this.currentPage = currentPage;
  100. }
  101. }

pageNo(跳转时用到list属性封装类)

  1. public class PageNo {
  2. private int pageNumber;     //跳转到第几页
  3. public int getPageNumber() {
  4. return pageNumber;
  5. }
  6. public void setPageNumber(int pageNumber) {
  7. this.pageNumber = pageNumber;
  8. }
  9. }

2.action

  1. @SuppressWarnings("serial")
  2. public class XxxAction extends ActionSupport implements Serializable {
  3. protected HttpSession getSession() {
  4. return ServletActionContext.getRequest().getSession();
  5. }
  6. private XxxService xxxService;
  7. public XxxService getXxxService() {
  8. return xxxService;
  9. }
  10. public void setXxxService(XxxService xxxService) {
  11. this.xxxService = xxxService;
  12. }
  13. private int page=1;     //第几页
  14. private PageBean pageBean;
  15. public int getPage() {
  16. return page;
  17. }
  18. public void setPage(int page) {
  19. this.page = page;
  20. }
  21. public PageBean getPageBean() {
  22. return pageBean;
  23. }
  24. public void setPageBean(PageBean pageBean) {
  25. this.pageBean = pageBean;
  26. }
  27. private List<PageNo> numberList;
  28. private PageNo pageNo;
  29. public PageNo getPageNo() {
  30. return pageNo;
  31. }
  32. public void setPageNo(PageNo pageNo) {
  33. this.pageNo = pageNo;
  34. }
  35. /**
  36. * 列表并分页
  37. * @return
  38. */
  39. public String getListAndPage(){
  40. pageBean=xxxService.queryForPage(this,10,page);
  41. numberList=new ArrayList<PageNo>();
  42. if(pageBean.getTotalPage()>0){
  43. for(int i=0;i<pageBean.getTotalPage();i++){
  44. pageNo=new PageNo();
  45. pageNo.setPageNumber(i+1);
  46. numberList.add(i, pageNo);
  47. }
  48. }
  49. getSession().setAttribute("numberList", numberList);
  50. return "success";
  51. }
  52. }

3.service,serviceImpl,dao略

4.daoImpl

  1. public class XxxDaoImpl extends BaseDAO implements XxxDao {
  2. /**
  3. * 列表并分页
  4. */
  5. @SuppressWarnings("unchecked")
  6. public PageBean queryForPage(XxxAction version,int pageSize,int page) {
  7. Session session=getSession();
  8. try{
  9. String sql=" from Entity as entity where 1=1 ";
  10. Query query1=session.createQuery(sql);
  11. Query query2=session.createQuery(sql);
  12. List list1 = query1.list();
  13. int allRow=list1.size();                                        //总记录数
  14. int totalPage=PageBean.countTotalPage(pageSize, allRow);    //总页数
  15. final int length=pageSize;                                  //每页记录数
  16. final int currentPage=PageBean.countCurrentPage(page);      //当前页,不要为0或url为空
  17. final int offset=PageBean.countOffset(pageSize, page);
  18. query2.setFirstResult(offset);
  19. query2.setMaxResults(length);
  20. List<PaiPubVersion> list2=query2.list();
  21. //把分页信息保存到Bean中
  22. PageBean pageBean = new PageBean();
  23. pageBean.setPageSize(pageSize);
  24. pageBean.setCurrentPage(currentPage);
  25. pageBean.setAllRow(allRow);
  26. pageBean.setTotalPage(totalPage);
  27. pageBean.setList2(list2);
  28. pageBean.init();
  29. return pageBean;
  30. }catch(RuntimeException re){
  31. throw re;
  32. }finally{
  33. if(session!=null){
  34. session.close();
  35. }
  36. }
  37. }
  38. }

5.jsp页面

  1. <td colspan="6">
  2. 共<s:property value="pageBean.allRow"/> 条记录
  3. 共<s:property value="pageBean.totalPage"/> 页
  4. 当前第<s:property value="pageBean.currentPage"/>页
  5. <s:if test="%{pageBean.currentPage == 1}">
  6. <input type="button" value="第一页" disabled="disabled" />
  7. <input type="button" value="上一页" disabled="disabled" />
  8. </s:if>
  9. <s:else>
  10. <input type="button" value="第一页" onclick="pageNo('1')"/>
  11. <input type="button" value="上一页" onclick="pageNo('<s:property value="%{pageBean.currentPage-1}"/>')"/>
  12. </s:else>
  13. <s:if test="%{pageBean.currentPage != pageBean.totalPage}">
  14. <input type="button" value="下一页" onclick="pageNo('<s:property value="%{pageBean.currentPage+1}"/>')"/>
  15. <input type="button" value="最后一页" onclick="pageNo('<s:property value="%{pageBean.totalPage}"/>')"/>
  16. </s:if>
  17. <s:else>
  18. <input type="button" value="下一页" disabled="disabled" />
  19. <input type="button" value="最后一页" disabled="disabled" />
  20. </s:else>
  21. 跳转到:
  22. <select id="gotoNo" name="gotoNo" onchange="onTiao()">
  23. <s:iterator value="#session.numberList">
  24. <s:if test="pageBean.currentPage eq pageNumber">
  25. <option value="<s:property value="pageNumber"/>" selected="selected" ><s:property value="pageNumber"/></option>
  26. </s:if>
  27. <s:else>
  28. <option value="<s:property value="pageNumber"/>"><s:property value="pageNumber"/></option>
  29. </s:else>
  30. </s:iterator>
  31. </select>
  32. </td>

6.js

  1. function pageNo(fenye){
  2. document.pageform.action="getListAndPage.action?page="+fenye;
  3. document.pageform.submit();
  4. }
  5. function onTiao(){
  6. var gotoNo = document.getElementById('gotoNo').value;
  7. document.pageform.action="getListAndPage.action?page="+gotoNo;
  8. document.pageform.submit();
  9. }

7.页面显示效果

S2SH项目实现分页功能的更多相关文章

  1. 基于SSM框架的简易的分页功能——包含maven项目的搭建

    新人第一次发帖,有什么不对的地方请多多指教~~ 分页这个功能经常会被使用到,我之前学习的时候找了很多资源,可都看不懂(笨死算了),最后还是在朋友帮助下做出了这个分页.我现在把我所能想到的知识 做了一个 ...

  2. 项目中的一个分页功能pagination

    项目中的一个分页功能pagination <script> //总页数 ; ; //分页总数量 $(function () { // $("#pagination"). ...

  3. DjangoRestFramework框架三种分页功能的实现 - 在DjangoStarter项目模板中封装

    前言 继续Django后端开发系列文章.刚好遇到一个分页的需求,就记录一下. Django作为一个"全家桶"型的框架,本身啥都有,分页组件也是有的,但默认的分页组件没有对API开发 ...

  4. 简单封装分页功能pageView.js

    分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...

  5. Asp.net MVC3表格共用分页功能

    在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一 ...

  6. WinForm DataGridView分页功能

    WinForm 里面的DataGridView不像WebForm里面的GridView那样有自带的分页功能,需要自己写代码来实现分页,效果如下图: 分页控件  .CS: 1 using System; ...

  7. 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架

    问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...

  8. python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法

    python_way day18 html-day4 1.Django-路由系统   - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...

  9. Android学习随笔--ListView的分页功能

    第一次写博客,可能格式,排版什么的会非常不美观,不过我主要是为了记录自己的Android学习之路,为了以后能有些东西回顾.既然是为了学习,那我肯定会吸收各位大大们的知道经验,有不足的地方请指出. 通过 ...

随机推荐

  1. Ubuntu的man中文包安装

    apt-get install manpages-zh vi /etc/manpath.config :,$s#/usr/share/man#/usr/share/man/zh_CN#g 第一个命令: ...

  2. excel 导出长数据 变成科学计数 解决办法

    加 “\t”

  3. linux设置网络三种方法

    http://blog.csdn.net/u010003835/article/details/52233296

  4. luffy课程表的创建-支付宝API-购买服务器

    课程组件 <template> <div class="course"> <Header></Header> <div cla ...

  5. dfs+剪枝 poj1011

    Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 113547   Accepted: 26078 问题描述 Ge ...

  6. ZJNU 2133 - 认亲大会

    将辈分差距转为数字 例如 A 是 B son A=B-1 A 是 B grandfather A=B+2然后编号1数字设置为0,建图bfs 最后搜索编号2到100是否存在>0的数即可 /* Wr ...

  7. 关于sql更新最后一个逗号的去除或则最后的and的去除

    去除最后的逗号substr_replace($update_sql ,"",-1);去除最后的and substr_replace($update_sql ,"" ...

  8. abstract关键字、final关键字、static关键字、访问修饰符详解

     abstract关键字.final关键字.static关键字.访问修饰符详解 abstract关键字: final关键字: static关键字: 访问修饰符:

  9. Django_HTML

    一.web开发之HTML 1.1 HTML相关基础 快速生成html的模版方法: 在visual code的新建html文件中输入:!然后tab回车就会出现HTML的模版 双标签: <p> ...

  10. Python语言学习:模块

    一.模块 1. 模块(Module):以.py结尾的文件,包含python对象定义和python语句.使代码段更容易理解和使用. 模块分为两种:标准库(直接导入的库)和第三方库(需要下载安装的库). ...