`
pavel
  • 浏览: 918350 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分页原理及出现的错误

阅读更多

1 设置跳转
  <logic:equal name="page" property="hasPreviousPage" value="true">
              <a href="list.do?currentPage=<bean:write name="page" property="previousPage"/>">上一页</a>
              </logic:equal>
              <logic:equal name="page" property="hasNextPage" value="true">
             <a href="list.do?currentPage=<bean:write name="page" property="nextPage"/>">下一页</a>
               </logic:equal>
2 在Form中设置private String currentPage ;
3进入action,在action中,页面信息都是在pagebean得到的,根据页面信息,进行分页操作
public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  ListForm listForm = (ListForm) form;// TODO Auto-generated method stub
    HttpSession session = request.getSession();
      PageBean pb ;
      NewsDao newsdao = new NewsDao();
      List list = new ArrayList();
      String currentPage = listForm.getCurrentPage();
      if(currentPage == null){
      int totalRows = newsdao.getTotalRows();
      System.out.println(totalRows);
      pb = new PageBean(totalRows,1);
      session.removeAttribute("page");
      System.out.println("当前页面"+String.valueOf(pb.getPageStartRow()));
      list = newsdao.getPageQueryDate(String.valueOf(pb.getPageStartRow()),String.valueOf(pb.getPageRecorders()));
      System.out.println("进入action11");
      }
    
      else{
      
      
   int totalRows = newsdao.getTotalRows();
      pb = new PageBean(totalRows,Integer.parseInt(currentPage));
      System.out.println("当前页面"+String.valueOf(pb.getPageStartRow()));
      list = newsdao.getPageQueryDate(String.valueOf(pb.getPageStartRow()), String.valueOf(pb.getPageRecorders()));
      
      session.setAttribute("page",pb);      
      request.setAttribute("all", list);
      return mapping.findForward("pageinfo");
}
}
在action中,会涉及到三个方法
(1)
查询到数据库中记录的跳数
  public int getTotalRows() {
    int totalRows = 0;
    String sql = "select count(*) from Newsvo";
    Connection conn = this.session.connection();
    PreparedStatement pstmt;
  try {
   pstmt = conn.prepareStatement(sql);
   ResultSet rs =pstmt.executeQuery();
     if(rs.next()){
      
      String id = (String) rs.getString(1);
      totalRows = Integer.parseInt(id);
          
     }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
    return totalRows;
  }
}
(2)
根据记录的条数,得到分页信息
public class PageBean {
private int currentPage = 1; // 当前页
private int totalPages = 0; // 总页数
private int pageRecorders = 5;// 每页5条数据
private int totalRows = 0; // 总数据数
private int pageStartRow = 0;// 每页的起始数
private int pageEndRow = 0; // 每页显示数据的终止数
private boolean hasNextPage = false; // 是否有下一页
private boolean hasPreviousPage = false; // 是否有前一页
private int nextPage = 0;//下一页的页码
private int previousPage = 0;//上一页的页码
  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;
    }
   }
public int getCurrentPage() {
  return currentPage;
}
public void setCurrentPage(int currentPage) {
  this.currentPage = currentPage;
}
public boolean isHasNextPage() {
  return hasNextPage;
}
public void setHasNextPage(boolean hasNextPage) {
  this.hasNextPage = hasNextPage;
}
public boolean isHasPreviousPage() {
  return hasPreviousPage;
}
public void setHasPreviousPage(boolean hasPreviousPage) {
  this.hasPreviousPage = hasPreviousPage;
}
public int getNextPage() {
  return nextPage;
}
public void setNextPage(int nextPage) {
  this.nextPage = nextPage;
}
public int getPageEndRow() {
  return pageEndRow;
}
public void setPageEndRow(int pageEndRow) {
  this.pageEndRow = pageEndRow;
}
public int getPageRecorders() {
  return pageRecorders;
}
public void setPageRecorders(int pageRecorders) {
  this.pageRecorders = pageRecorders;
}
public int getPageStartRow() {
  return pageStartRow;
}
public void setPageStartRow(int pageStartRow) {
  this.pageStartRow = pageStartRow;
}
public int getPreviousPage() {
  return previousPage;
}
public void setPreviousPage(int previousPage) {
  this.previousPage = previousPage;
}
public int getTotalPages() {
  return totalPages;
}
public void setTotalPages(int totalPages) {
  this.totalPages = totalPages;
}
public int getTotalRows() {
  return totalRows;
}
public void setTotalRows(int totalRows) {
  this.totalRows = totalRows;
}
}
(3)根据分页信息,把数据查询出来

public List<Newsvo> getPageQueryDate(String startRow,String num){
  List list = new ArrayList();
  System.out.println("进入查询");

  String sql="select * from Newsvo limit "+startRow+","+num;
  Connection conn = this.session.connection();
  PreparedStatement pstmt ;
  try {
   pstmt = conn.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();
  
   while(rs.next()){
  
    Newsvo news = new Newsvo();
    news.setId(rs.getInt("id"));
    news.setUrl(rs.getString("url"));
    //news.setUrl(newsvo.getUrl());
    news.setTitle(rs.getString("title"));
    System.out.println(rs.getString("title"));
    list.add(news);
   } } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  
  
  return list;
}

错误:dao中,
while(rs.next()){
    Newsvo news = new Newsvo();
    news.setId(rs.getInt("id"));
    news.setUrl(rs.getString("url"));
    //news.setUrl(newsvo.getUrl());
    news.setTitle(rs.getString("title"));
    System.out.println(rs.getString("title"));
    list.add(news); }
我把vo的定义,放在while以外,发生了查询的是同一条数据。

分享到:
评论
1 楼 zzx0421 2008-11-18  
这是因为list保存的是引用

相关推荐

    gatsby-starter-infinite-scroll:具有无限滚动和分页功能的Gatsby入门

    默认行为是使用无限滚动,但是如果禁用了JS或发生错误,则会回退到分页。 此外,该演示还具有切换功能,因此您可以在不禁用浏览器中的JS的情况下测试两种模式。 此实现不会在初始pageload时获取不必要的元数据。 ...

    ThinkerCMS 1.4.zip

    04-25修复bug*修复前端页面缓存在列表分页时只能缓存一页*修复启用url路由简化地址的时候分页还是原理的地址*优化安装程序,去掉安装锁定文件,用数据库配置文件代替锁定文件*优化内容模型*修复约束权限的一个错误*...

    ThinkerCMS v1.4.rar

    *修复启用url路由简化地址的时候分页还是原理的地址 *优化安装程序,去掉安装锁定文件,用数据库配置文件代替锁定文件 *优化内容模型 *修复约束权限的一个错误 *修复跳转url无法保存数据 *修复面包屑导航链接...

    SQL Server的通用分页存储过程 未使用游标,速度更快!

    甚至发生响应超时的错误 为了解决这种大数据量请求的问题,就不得不使用分页模式了 在这方面,JDBC就强悍得多,它可以将指定的行数和SQL请求一并发送给SQL Server,这样只返回分页后的数据,JDBC的原理还不清楚,但...

    计算机组成原理考研纲要

    (14)Cache原理基础:程序访问的局部性原理 ①命中率:h ②平均访问时间: ta=htc+(1-h)tm  ③主存与Cache的速差倍数:r=tm/tc (=5~10) ④访问效率:e = Cache访问时间/平均访问时间= 1/(r+(1-r)h) ⑤影响命中率h...

    magic-api:magic-api是一个接口快速开发框架,通过Web页编写脚本以及配置,自动映射为HTTP接口,无需定义控制器,服务,Dao,Mapper,XML,VO等Java对象

    |||||其他 简介 ...特性 支持MySQL,MariaDB,Oracle,DB2,PostgreSQL,SQLServer等多支持jdbc规范的数据库 支持非关系型数据库Redis,Mongodb ...支持脚本代码自动提示,错误提示,参数提示,语法错误提示

    Guns 技术文档 旗舰版v2.3.pdf

    3.5.2 复杂查询的分页 3.5.3 获取前端表格插件传值 3.6 数据范围 3.6.1 介绍 3.6.2 如何使用 3.6.3 原理 3.7 guns-rest模块的使用 3.7.1 关于jwt鉴权 3.7.2 关于传输数据的签名 3.7.3 guns-rest模块的运行流程 3.7.4...

    clean-redux-demo:示例应用程序展示了将Redux和Clean Architecture原理相结合的体系结构,适用于Kotlin的Android

    干净的redux-demo Kotlin中的示例Android应用程序使用展示了结合和原理的。结构该应用程序包含两个屏幕: 登录屏幕:此功能是模拟的。... 还包含:分页,重新加载功能和错误处理。 当前没有可用的RX实现。执照根据。

    php微信公众号开发之翻页查询

    分页原理 limit 开始位置 , 条数 (当前页数 – 1) x 每页条数 , 每页条数 limit ($Page – 1) * $PageSize , $PageSize 0 为开始位置 mysql_num_rows 条数 require() 与 require_once() 开始加载,错误停止 ...

    操作系统原理 计算机

    CH1 操作系统概论............................................................................................................................1 1.1 操作系统概观.............................................

    php课程(共100多节)

    13:PHP+MYSQL分页原理 14:PHP上传原理及应用 15:PHP生成HTML文件原理 16:PHP小偷程序原理和实例 17:PHP面向对象开发的学习(一) 18:PHP面向对象开发的学习(二) 19:PHP面向对象开发的学习(三) 20:PHP...

    通过代码实例了解页面置换算法原理

    分页硬件在通过页表转换地址时会注意到无效位被设置,从而陷入操作系统,这种陷阱是因为操作系统未能将所需要的页面调入内存引起的。 处理缺页错误: 1、检查这个进程的内部表,确定该引用是否为有效的内存访问...

    精通Windows.API-函数、接口、编程实例.pdf

    6.4.4 进程的堆使用、内存占用、虚拟内存大小,页面错误情况 184 6.5 动态链接库 185 6.5.1 加载、释放DLL、通过句柄获取DLL相关信息 186 6.5.2 编写动态链接库、导出函数 186 6.5.3 创建动态链接库工程,...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...

    (全)传智播客PHP就业班视频完整课程

    处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...

    史上最全传智播客PHP就业班视频课,8月份视频

    处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程13:PHP+MYSQL分页原理 PHP100视频教程14:PHP上传原理及应用 PHP100视频教程15:PHP生成HTML文件原理 PHP100视频教程16:PHP小偷程序原理和实例 PHP100视频教程17:PHP面向对象开发的学习(一) ...

Global site tag (gtag.js) - Google Analytics