`
pavel
  • 浏览: 930947 次
  • 性别: 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保存的是引用

相关推荐

    php 的简单分页原理

    以下是对分页原理的详细解释。 首先,我们从MySQL的角度理解分页。在MySQL中,可以使用`SELECT`语句配合`LIMIT`关键字来实现分页。例如,如果有一个名为`table`的表,要获取前10条记录,我们可以使用如下SQL查询: ...

    DOMINO表单分页实现原理

    【DOMINO表单分页实现原理】 在DOMINO开发中,实现表单分页是提高用户体验和优化数据加载的关键技术。通常,有两种方法可以达到这一目标:通过代理(Proxy)和使用JavaScript代码。 1. **代理(Proxy)实现分页**: ...

    MySQL分页分析原理及提高效率

    MySQL分页的原理和效率提升方法涉及到的几个关键点如下: 1. 分页查询的原理:在MySQL中,分页查询通常使用LIMIT和OFFSET关键字来实现。基本格式为LIMIT offset, count。其中offset指的是从哪一行开始返回数据,...

    PHP+mysql分页原理和实例应用.pdf

    **PHP+MySQL分页原理与实现** 在网页开发中,当数据量较大时,一次性将所有数据加载到页面上不仅会影响用户体验,也会增加服务器负担。因此,分页显示成为了一个必要的解决方案。本篇将深入讲解PHP与MySQL结合实现...

    AJAX分页技术

    AJAX(Asynchronous JavaScript and XML)分页技术是一种在网页不刷新的情况下,通过JavaScript与服务器进行异步数据交互...但无论采用何种技术,了解AJAX分页的基本原理和实现方式,对于任何Web开发者来说都是有益的。

    js分页示例,前台分页,客户端分页,分页机制,js分页

    以上代码是一个简化的示例,实际应用中可能需要考虑更多细节,如错误处理、无限滚动分页、动态加载数据等。在项目中,你还可以使用现成的分页库,如jQuery的`bootstrap-paginator`或纯JavaScript的`paginator.js`,...

    ES深度分页.docx

    为了找到每一页最后一条数据,每个文档必须有一个全局唯一值,这种分页方式其实和目前 moa 内存中使用 rbtree 分页的原理一样,官方推荐使用 `_id` 作为全局唯一值,其实使用业务层的 id 也可以。 第二页的请求,...

    ajax 分页 ajax分页

    **Ajax分页原理:** Ajax分页的基本原理是通过JavaScript异步发送HTTP请求到服务器,请求只获取当前页所需的数据,然后在客户端用JavaScript动态地将这些数据插入到网页中。这样用户可以在浏览页面时保持交互性,而...

    winform的分页控件,带数据分页

    5. 错误处理:处理可能出现的网络错误、数据库错误或其他异常情况。 在提供的压缩包文件“PagerControlTest”中,可能包含了实现上述功能的一个示例项目,包括分页控件的代码和测试用例。通过研究这些代码,开发者...

    android自定义分页控件

    首先,我们需要理解分页的基本原理。分页通常是通过在后台服务器上对数据进行切片,每次请求只加载一部分数据,而不是一次性加载所有内容。这可以通过网络API调用来实现,如使用Retrofit或Volley库。在客户端,我们...

    Jquery Ajax分页(有实例)

    - **错误处理**:处理AJAX请求可能出现的错误,如网络中断,提供友好的错误提示。 - **用户体验**:添加加载指示器,让用户知道内容正在加载;考虑无数据和最后一页的特殊处理。 通过以上分析,我们了解到jQuery ...

    asp超简单分页显示

    一、理解分页原理 分页的基本思想是根据每一页显示的数据量,从数据库中查询相应范围的数据,然后在网页上呈现。关键参数包括当前页数、每页显示的记录数以及总记录数。 二、ASP分页基础 在ASP中,我们通常会使用...

    ajax分页视频教程

    6. **错误处理与兼容性**:讨论Ajax请求可能出现的错误,如网络中断、请求超时等,并学习如何进行错误处理。同时,确保在不同浏览器中的兼容性。 7. **优化与最佳实践**:介绍一些提高性能和用户体验的策略,比如...

    使用jquery实现表格动态分页

    首先,让我们了解动态分页的基本原理。动态分页是指在用户滚动或点击分页按钮时,仅加载当前显示的数据,而不是一次性加载所有数据。这种做法提高了页面加载速度,减少了服务器压力,并优化了用户体验。 **一、...

    分页控件及源码(c#)

    总结,C# .NET中的分页控件是Web开发中的重要组成部分,通过理解其工作原理和源码,开发者可以更好地实现高效、用户体验良好的数据展示。"hongxu"项目的源码提供了自定义分页控件的具体实现,通过学习和分析,可以...

    ASP分页教程分页教程

    ASP分页技术是Web开发中一个重要的概念,用于处理大量数据时分割长列表或内容,以便用户能够方便地逐页浏览。在这个ASP分页教程中,我们将深入理解如何实现简单的分页...不过,理解基本的分页原理仍然是至关重要的。

    js实现的分页

    2. **错误处理**:当请求失败或数据异常时,应有适当的错误提示和恢复机制。 3. **性能优化**:避免一次性加载大量数据,影响页面加载速度。 通过以上步骤和策略,我们可以利用JavaScript有效地实现一个具有交互性...

    将Web层分页封装成通用模块

    一、分页原理与设计 1. 分页的基本概念:分页是将数据库中的大量数据分为若干页进行显示,用户可以逐页浏览,减少一次性加载的数据量,提高页面响应速度。 2. 分页参数:通常包括当前页码(PageNo)、每页条数...

    PHP的分页源代码 分页代码

    #### 二、PHP分页原理及步骤 1. **获取总记录数**:首先需要查询数据库中的总记录数。 2. **设置每页显示记录数**:根据需求设定每页显示的数据条数。 3. **计算总页数**:通过总记录数除以每页显示的记录数得到总...

    asp分页类,套用方便,收藏

    5. **错误处理**:良好的分页类应该包含错误处理机制,以应对可能出现的问题,如无效的页码输入或数据库连接问题。 6. **重用性与灵活性**:一个优秀的分页类应设计成可复用的,允许开发者自定义样式、链接格式等,...

Global site tag (gtag.js) - Google Analytics