欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jsp制作分页效果(假分页) 博客分类: Web技术  

程序员文章站 2024-03-02 18:44:04
...

jsp制作分页效果(假分页)
            
    
    博客分类: Web技术  

 

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

 

(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样式效果主要用在分页显示效果上面
 <c:if test="${allpage>1}">
 <div align="right" class="viciao">
     <a href="indexmanager!page.action?type=first&id=1">&nbsp; 首页&nbsp;</a>
      <a href="indexmanager!page.action?type=prvious&id=1">&nbsp; < Prev&nbsp;</a>
      <%
			  for (int i = currentPage - 2; i <= currentPage + 2 && i <= allPages; i++) {
											if (currentPage == i) {
		%>
			<span class="current"><%=i%></span>
			<%
				} else if (i > 0) {
				%>
				<a href="indexmanager!page.action?type=<%=i %>&id=1"><%=i%></a>
				<%
					}
					}
					%>
      <a href="indexmanager!page.action?type=next&id=1">&nbsp;Next  >&nbsp;</a>
       <a href="indexmanager!page.action?type=last&id=1">&nbsp;尾页&nbsp;</a>     
      </div>
      </c:if>
  </c:if>

 在上面中我们还看到有indexmanager!page.action页面跳转,那么看看page这个函数的功能

 

	public String page()
	{
		PageVo pagevo=(PageVo) session.getAttribute("pagevo");
		//获取分页的类型
		String type=request.getParameter("type");
		if("prvious".equals(type))
		{
			pagevo.setPrivousPage();
		}
		else if("next".equals(type))
		{
			pagevo.setNextPage();
		}
		else if("first".equals(type))
		{
			pagevo.setFirstPage();
		}
		else if("last".equals(type))
		{
			pagevo.setLastPage();
		}
		else
		{
			int pageNo=Integer.parseInt(type);
			pagevo.setPageNo(pageNo);
		}
		List<Article> articles=pagevo.getPageNow();
		//得到当前页
		int currentpage=pagevo.getPageNo();
		session.setAttribute("articles", articles);
		session.setAttribute("pagevo", pagevo);
		session.setAttribute("currentpage", currentpage);
		return "editarticle";
	}

 page函数主要是根据我们点击的分页数,就是上面显示的1,2,3等等或上一页、下一页、首页、和尾页来获取相应的该也得信息,然后对它进行重新绑定。

 

最后我这里提供一个分页显示的CSS样式,记住这个要在jsp中引入该css样式,而且在第四步中使用了

<div align="right" class="viciao">

中的viciao就是该css样式,当然在这个样式中还有很多中样式类型

  • css.rar (407 Bytes)
  • 下载次数: 63