上一节的Page类中还有三个属性pageTotal总页数,nextPage下一页,prePage上一页,这三个属性需要计算得到,可以在Page类中相应的getter实现。
总页数的计算公式是,总记录数量加上每一页显示数量减1,结果再除以每一页显示数量。
这个公式是推导出来的,简单来说总页数可以是总记录数除以每一页显示数量,这个好理解,但事实上这个直接除法运算的结果是整型,比如总记录数31,每页显示10条,总页数计算应该是4页而不是3页,因为剩下一条记录要单独成为一页。因此,要正确计算,就要在原来的总记录数上再加多一页的数量,即总记录数量加上每一页显示数量,比如31+10,再除以每页显示数量10,得到的才是4。但是如果总记录数30,再加10,除以每页显示数量10,得到4,实际这样整除了应该是整整3页才对,因此,这里还需要减1,这个公式才能得到正确的总页数。
public int getPageTotal() { int pageTotal = (recordTotal + pageSize -1) / pageSize; return pageTotal; }
public int getNextPage() { return pageNow +1; }
public int getPrePage() { return pageNow -1; }
这三个方法有了之后,就可以在页面上加一个表单来填写要显示的当前页码了。
如果要使用HTML超链接,可以加入a href标签。点击这个“上一页”和“下一页”的链接,就可以实现翻页效果了。
如果再加入实际的数字页码,比如1,2,3,4,5 这些数字页码,可以在Page中定义一个列表对象,把这些页码放到列表对象中即可。
/**
* 页码显示
*/
private List pageList;
public List getPageList() {
return pageList;
}
public void setPageList(List pageList) {
this.pageList = pageList;
}
同时在setRecordList方法中,把当前页的前5个页码和后5个页码放在pageList对象中。
public void setRecordList(List recordList) { this.recordList = recordList; for(int i=pageNow-5; i< pageNow+5; i++) { pageList.add(i); } }
在jsp中使用jstl标签c:forEach把页码打印出来,并加入a href超链接就可以了。