首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

哪位高手来帮小弟我看看,小弟我这样写错在哪了

2012-01-24 
谁来帮我看看,我这样写错在哪了写了一个DAO+分页辅助类,但有些问题:点击最后一页时总是显示java.lang.Inde

谁来帮我看看,我这样写错在哪了
写了一个DAO+分页辅助类,但有些问题:
点击最后一页时总是显示java.lang.IndexOutOfBoundsException:   Index:   13,   Size:   13

数据库表中目前共有13条记录,就是找不出越界在哪里。
哪位帮我看看

===============

主要代码如下
//=======分页辅助类Pager.java=======

package   com.saro.demo.util;

public   class   Pager   {
  private   int   currentpage;//当前页码
  private   int   pagesize=3;//每页显示记录数
  private   int   totalsize;//总的记录数
  private   int   totalpage;//总的页数
 
  private   boolean   hasFrist;//判断首页   判断   当前页是否是第1页就可以
  private   boolean   hasPervious;//上一页   如果有首页肯定有上一页   反之
  private   boolean   hasNext;//下一页   如果有尾页肯定有下一页
  private   boolean   hasLast;//尾页     判断是否为最后一页
  public   Pager(int   curentpage,int   totalsize)
  {
    this.currentpage   =   curentpage;
    this.totalsize   =   totalsize;
  }
  public   int   getCurrentpage()   {
    return   currentpage;
  }
  public   void   setCurrentpage(int   currentpage)   {
    this.currentpage   =   currentpage;
  }
  public   boolean   isHasFrist()   {
    if(currentpage==1)
      return   false;
   
    return   true;
  }
  public   void   setHasFrist(boolean   hasFrist)   {
    this.hasFrist   =   hasFrist;
  }
  public   boolean   isHasLast()   {
    if(currentpage==getTotalpage())
      return   false;
    return   true;
  }
  public   void   setHasLast(boolean   hasLast)   {
    this.hasLast   =   hasLast;
  }
  public   boolean   isHasNext()   {
    if(isHasLast())
      return   true;
    return   false;
  }
  public   void   setHasNext(boolean   hasNext)   {
    this.hasNext   =   hasNext;
  }
  public   boolean   isHasPervious()   {
    if(isHasFrist())
      return   true;
   
    return   false;
  }
  public   void   setHasPervious(boolean   hasPervious)   {
    this.hasPervious   =   hasPervious;
  }
  public   int   getPagesize()   {
    return   pagesize;
  }
  public   void   setPagesize(int   pagesize)   {
    this.pagesize   =   pagesize;
  }
  //总页数就是用总记录数/页面最大记录数  
  //最后   磨一个就是多出的记录也做一页加算进总页数
  public   int   getTotalpage()   {
    totalpage   =   totalsize   /   pagesize;
    if(totalsize%pagesize!=0)
  {
totalpage++;
  }
    return   totalpage;
  }
  public   void   setTotalpage(int   totalpage)   {
    this.totalpage   =   totalpage;
  }
  public   int   getTotalsize()   {
    return   totalsize;


  }
  public   void   setTotalsize(int   totalsize)   {
    this.totalsize   =   totalsize;
  }

}


//=========list.jsp=========

<%@taglib   uri= "http://java.sun.com/jstl/core_rt "   prefix= "c "   %>
<%@page   contentType= "text/html;charSet=GBK "   %>
<%@page   import= "java.util.* "   %>
<%@page   import= "com.saro.demo.util.* "   %>
<%@page   import= "com.saro.demo.vo.* "   %>
<%@page   import= "com.saro.demo.factory.* "   %>
<%
int   currentpage=1;
if(request.getParameter( "currentpage ")!=null)
currentpage   =   Integer.parseInt(request.getParameter( "currentpage "));

List   allPerson   =   DAOFactory.getPersonDAOInstance().queryAll();
Pager   p   =   new   Pager(currentpage,allPerson.size());

List   pagePerson   =   new   ArrayList();
for(int   i=((p.getCurrentpage()-1)*p.getPagesize());i <(p.getCurrentpage()*p.getPagesize());i++)
{
Person   person   =   (Person)allPerson.get(i);
pagePerson.add(person);
}
session.setAttribute( "pagePerson ",   pagePerson);
session.setAttribute( "pager ",   p);
%>
<p> &nbsp;   </p>
<center>
<table   Style= "border:1px   solid   #c0c0c0;width:80% ">
<tr   bgcolor= "#EBECED ">
<th> # </th>
<th> ID </th>
<th> NAME </th>
<th> PASSWORD </th>
<th> AGE </th>
<th> EMAIL </th>
</tr>
<c:forEach   items= "${sessionScope.pagePerson} "   var= "prsn "   varStatus= "status ">
<tr   bgcolor= "#EBF0F3 ">
<td   align= "center "> ${status.index+1} </td>
<td> ${prsn.id} </td>
<td> ${prsn.name} </td>
<td> ${prsn.password} </td>
<td> ${prsn.age} </td>
<td> ${prsn.email} </td>
</tr>
</c:forEach>
</table>

<br>
<div   style= "width:80%;text-align:right ">
<c:if   test= "${pager.hasFrist} "   >
<a   href= "list.jsp?currentpage=1 "> Home </a>
</c:if>  

<c:if   test= "${pager.hasPervious} ">
<a   href= "list.jsp?currentpage=${pager.currentpage-1   } "> Preview </a>
</c:if>

<c:if   test= "${pager.hasNext} ">
<a   href= "list.jsp?currentpage=${pager.currentpage+1   } "> Forward </a>
</c:if>

<c:if   test= "${pager.hasLast} ">
<a   href= "list.jsp?currentpage=${pager.totalpage} "> End </a>
</c:if>

( <c:out   value= "${pager.currentpage} "/> / <c:out   value= "${pager.totalpage} "/> &#1203;)
</div>
</center>


[解决办法]
for(int i=((p.getCurrentpage()-1)*p.getPagesize());i <(p.getCurrentpage()*p.getPagesize());i++)
{


Person person = (Person)allPerson.get(i);
pagePerson.add(person);
}
------------------------------------------
估计是这段出的问题,现在假设Pagesize是5,总共有13条记录,就是说最后一页有3条记录.
也就成了for(int i=(3-1)*5;i <3*5;i++)

这样肯定越界啊,最后一页的话,应该是小于最大记录的(13).所以这里还要加一个判断最大页的处理,如果大于最大页了,那么就应该以最大记录数为边界.

热点排行