日期:2014-05-16 浏览次数:20574 次

?
上面就是我制作的分页效果
?
(1)首先定义一个分页功能的类:
public class PageVo {
/**保存从数据库中读取出的全部数据*/
private List list;
/**保存每一页的信息*/
private List pageList=new ArrayList();
/**保存当前页*/
private List pageNow;
/**当前的页数*/
private int pageNo=1;
/**一共有多少页*/
private int pageMax;
/**每一页显示多少条记录*/
private int pageRowNum;
public PageVo(List list,int pageRowNum)
{
this.list=list;//获取到数据库的全部信息
this.pageRowNum=pageRowNum;//获取每一页要显示多少条记录
splitpage();//计算分页算法
getNowList();//取出每一页的数据
}
/**
* 分页算法,得出最大的页数以及每一页存放的数据
*/
public void splitpage()
{
//得出一共有多少条记录
int size=list.size();
//这个if语句主要是判断取整的问题,如果总得条数除以每一页的显示的条数为0的话
//那么一共可以分为pageMax页,如果不为0,那么要记得加上1,
//不然的话就显示不了最后一页的信息了
if(size%pageRowNum==0)
{
pageMax=size/pageRowNum;
}
else
{
pageMax=size/pageRowNum+1;
}
int index=0;
//这里是先取出一页中的要显示的条数放到一个List集合中
//然后再使用List保存每一页
for(int i=0;i<pageMax;i++)
{
ArrayList tlist=new ArrayList();
//这个循环是保存每一页的信息
for(int j=0;j<pageRowNum;j++)
{
if(index<size)
{
tlist.add(list.get(index++));
}
else
{
break;
}
}
//将每一页的信息保存到List集合中
pageList.add(tlist);
}
}
/**
* 取出每一页的数据
*/
public void getNowList()
{
int n=pageNo-1;
this.pageNow=(ArrayList)pageList.get(n);
}
/**
* 第一页
*/
public void setFirstPage()
{
this.pageNo=1;
getNowList();
}
/**
* 前一页
*/
public void setPrivousPage()
{
if(this.pageNo>1)
{
this.pageNo--;
}
getNowList();
}
/**
* 下一页
*/
public void setNextPage()
{
if(this.pageNo<this.pageMax)
{
this.pageNo++;
}
getNowList();
}
/**
* 最后一页
*/
public void setLastPage()
{
this.pageNo=this.pageMax;
getNowList();
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public List getPageList() {
return pageList;
}
public void setPageList(List pageList) {
this.pageList = pageList;
}
public List getPageNow() {
return pageNow;
}
public void setPageNow(List pageNow) {
this.pageNow = pageNow;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
getNowList();
}
public int getPageMax() {
return pageMax;
}
public void setPageMax(int pageMax) {
this.pageMax = pageMax;
}
public int getPageRowNum() {
return pageRowNum;
}
public void setPageRowNum(int pageRowNum) {
this.pageRowNum = pageRowNum;
}
}
? (2)定义好分页功能后,在servlet或我们的struts中分页的过程
/**
* 开始进行分页
* @param a表示已经从数据库中取出了全部的信息
* @param pageRowNum每一页要显示的多少条记录
*/
@SuppressWarnings("unchecked")
public void beginpage(List<Article> a,int pageRowNum)
{
PageVo pagevo=new PageVo(a,pageRowNum);
//得到当前页
int currentpage=pagevo.getPageNo();
//得到总共的页数
int allpage=pagevo.getPageMax();
//得到第一页的信息
List<Article> articles=pagevo.getPageNow();
//记住这里要用session绑定相应的信息
? session.setAttribute("currentpage", currentpage);
session.setAttribute("allpage", allpage);
session.setAttribute("articles", articles);
session.setAttribute("pagevo", pagevo);
}
?
(3)在JSP页面中添加如下的功能
<%
//currentpage就是当前页,allPages表示的就是一共有多少页。这些在后面都会用到
?int currentPage = Integer.parseInt(session.getAttribute(
"currentpage").toString());
int allPages = Integer.parseInt(session.getAttribute("allpage")
.toString());
%>
?(4)一般我们在显示一页信息之后加上如上图所示的分页图标的既在
<c:forEach items="${articles}" var="article">
??????????????????????????????? :
??????????????????????????????? :
</c:forEach>
记得articles吧,它是我们第二步使用session绑定的一个articles。
我们在</c:forEach>后面加上分页数字
//<c:if test="${allpage>1}">allpage是表示一共分几页,这里主要表示是否达到分页,
//class="viciao"是一个CSS样式效果主要用在分页显示效果上面