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

jsp制作分页效果(假分页)

?

上面就是我制作的分页效果

?

(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样式效果主要用在分页显示效果上面