首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 开源技术 >> Struts >> 正文

我的struts分页算法的实现

二,根据总的页数,当前页
这样的话构造函数应该写成:
public PageBean(int totalRows,int currentPage) {
  this.totalRows = totalRows;
  this.currentPage = currentPage;
  if(currentPage < 2)
   hasPreviousPage = false;
  else
   hasPreviousPage = true;
  if ((totalRows % pageRecorders) == 0) {
   totalPages = totalRows / pageRecorders;
  } else {
   totalPages = totalRows / pageRecorders + 1;
  }
  if (currentPage < totalPages) {
   hasNextPage = true;
   nextPage = currentPage + 1;
   pageStartRow = (currentPage - 1)*pageRecorders;
   this.pageEndRow = pageStartRow + pageRecorders;
  } else if(currentPage == totalPages){
   pageStartRow = (currentPage - 1)*pageRecorders;
   this.pageEndRow = totalRows;
   hasNextPage = false;
   nextPage = currentPage;
  }
  if(currentPage < 2){
   previousPage = currentPage;
   hasPreviousPage = false;
  }else if(currentPage > 1){
   previousPage = currentPage-1;
   hasPreviousPage = true;
  } 
 }

在action中应该写成
if(currentPage == null){
    pb = new PageBean(totalRows);
    session.removeAttribute("page");
    queryString = employeeForm.getQueryString();
    queryCon = employeeForm.getQueryCon();
    session.setAttribute("queryString",queryString);
    session.setAttribute("queryCon",queryCon);   
    list = employeeDao.getAllEmployee(queryString, queryCon,
      String.valueOf(pb.getPageStartRow()),
      String.valueOf(pb.getPageRecorders()));
    }
   else{
    pb = new PageBean(totalRows,Integer.parseInt(currentPage));
    queryString = employeeForm.getQueryString();
    queryCon = employeeForm.getQueryCon();
    session.setAttribute("queryString",queryString);
    session.setAttribute("queryCon",queryCon);   
    list = employeeDao.getAllEmployee(queryString, queryCon,
      String.valueOf(pb.getPageStartRow()),
      String.valueOf(pb.getPageRecorders()));
   }
  session.setAttribute("page",pb);        
  request.setAttribute("admin", "admin");
  request.setAttribute("employee", list);
  return mapping.findForward("showlist");

在jsp中应该写成:
<logic:equal name="page" property="hasNextPage" value="true">
<a href="List.do?currentPage=<bean:write name="page" property="nextPage"/>">
nextPage
</a>
</logic:equal>
<logic:equal name="page" property="hasPreviousPage" value="true">
 | 
<a href="/test/List.do?currentPage=<bean:write name="page" property="previousPage"/>">
PreviousPage
</a>
</logic:equal>
数据库查询部分依然适用。



    尽管洋洋洒洒贴了一部分代码,不过好像不太想看,包括我,也比较讨厌看一些烦琐的代码,所以如果你想要源代码进行探讨研究的话,欢迎随时找我。那就总结一下这两种方法吧
首先这两种方法都是取需要显示的数据显示,这样,在数据库庞大的情况下,比一次性把所有数据都取出来的效率要高。
    第一种方法是把PageBean存在了一个HttpSession中,在进入到显示列表的时候就进行了初始化,在jsp页面传递的参数action是固定的三个值:null,nextPage,previousPage.这样虽然比较容易理解,但是我发现一个BUG,就是如果你按刷新,他也会翻页,因为他的url就是 .do?aciton=nextPage,这样的话你传进去的action还是有一个值,这样就会导致翻页。
    第二种方法是考虑了第一种方法的BUG,在jsp页面传递的参数currentPage的值是bean中的nextPage的值或者previousPage里的值,用了struts标签库嵌套,把值赋予currentPage,这样的话currentPage的值是:1,2,3,4...totalPages之间。这样的话你即使按刷新按钮,他也是当前页,因为他的url就是.do?currentPage=someNumber(someNumber是1到totalPages中的一个值)。但是这样的话Pagebean在每次访问的时候都要重新生成一个对象,该对象也是根据totalRows(总数据数),currentPage(当前页数)进行构造,从而设置其他的一些属性。个人比较推荐第二种方法。

上一页  [1] [2] [3] 

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·Oracle外键及外键约束修改行为
 ·开源软件测试工具学习专题
 ·JSP Web开发 入门基础到高手进阶教程
 ·JavaFX—是Java桌面的新希望么?
 ·安全至上 .NET开发安全策略
 ·测试用例设计之道-测试用例学习专题
 ·面向Java开发人员的Scala指南
 ·Java设计模式之实例详解
 ·Oracle数据库11g 面向DBA和开发人员的重要新特性
 ·桌面应用软件编程 J2SE技术详解
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航