读书人

哪位高手来帮小弟我看看小弟我这样写

发布时间: 2012-01-24 23:11:55 作者: rapoo

谁来帮我看看,我这样写错在哪了
写了一个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>   </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} "/> ҳ)
</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).所以这里还要加一个判断最大页的处理,如果大于最大页了,那么就应该以最大记录数为边界.

读书人网 >Java Web开发

热点推荐