javaWeb 分页实现

无论是servlet还是后面的框架此方法都是适用的,只需要写好类在servlet中直接调用就行(代码如下)

    

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 分页类,用于获取分页
 * 【更新说明】
 * 1,增加属性:isReverse Boolean类型,用于控制是否反转记录
 * 2,page方法增加参数:key String类型,用于指定存入session中的集合的属性名
 * 3,改进了分页算法
 * 【bug修改说明】
 * 1,修正了设置参数无效的问题
 * 2,修正了记录顺序异常的问题
 * 3,修正了无法在footer链接中增加查询字符串的问题
 * 
 */
public class PageService {
	
	private int pageId = 1;// 表示当前请求的分页号
	
	private int pageSize = 10;
	
	private int rows; // 记录总数

	private int total; // 总共的页数
	
	private boolean isReverse = false;
	
	public int getPageId() {
		return pageId;
	}

	public void setPageId(int pageId) {
		if (pageId <= 0) {
			pageId = 1;
		}
		this.pageId = pageId;
	}
	
	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public void setRows(List list) {
		this.rows = list.size();
	}

	public int getRows() {
		return rows;
	}	
	
	public boolean isReverse() {
		return isReverse;
	}


	public void setReverse(boolean isReverse) {
		this.isReverse = isReverse;
	}


	public void setTotal(List list) {// 该方法用来求得,总共的页数
		total = list.size() / pageSize;// 该语句用来求得除pageSize的整数
		int e = list.size() % pageSize;// 该语句用来求得相除后的余数
		if (e != 0) {// 如果余数不为零,则total加一
			this.total = this.total + 1;
		}	
	}
	
	public int getTotal() {
		return total;
	}
	
	/**
	 * 取得当前页码所对应的记录
	 * @param page_Id <code>String</code>类型 页码
	 * @param pageSize 每页的大小(显示的条目的数目)
	 * @param alllist 所有的记录的集合
	 * @return 应该在页面中读取的条目的集合
	 */
	public List getPage(String page_Id,int pageSize,List allList){
		if(null == page_Id){
			page_Id = "1";
		}
		//设置请求分页号
		setPageId(Integer.parseInt(page_Id));
		//设置分页的记录数
		setPageSize(pageSize);
		//设置记录总数
		setRows(allList);
		//设置总共的页数
		setTotal(allList);
		
		int start = 0;
		int end = 0;
		
		ArrayList tempList  = new ArrayList();
		
		if(this.isReverse)
		{
			for(int i = allList.size() ; i>0; i--){
				tempList.add(allList.get(i-1));
			}
		}
		else
		{
			tempList = (ArrayList) allList;
		}
		List res = new ArrayList();
		int countAll = allList.size();
		
		if(total<=1){//如果最大页数小于等于一,也就是说其实只有一页
			start = 0 ;
			end = countAll;
		} else if(pageId < total){ //如果请求的页码小于最大页数
			start = (pageId - 1) * pageSize;
			end = pageId * pageSize;
		} else if(pageId >= total){ //如果请求的页码大于等于最大页数
			start = (pageId - 1) * pageSize;
			end = countAll;
		}
		
		res = tempList.subList(start, end);
		return res;
	}
	
	
	/**
	 * 显示页码导航
	 * @param path 请求页面的完整URL,不要带查询字符串
	 * @param action 需呀在请求URL额外增加的查询字符串,以“&”开头(参考范例<code>"&command=key"</code>),如果无参数请留空
	 * @return
	 */
	public String getPageFooter(String path,String action){ 
		if(action==null){
			action = "";
		}
		String str = "";
		int to_tal =total-(total-1); 
		
		int next, prev;
		
		prev = pageId - 1;
		next = pageId + 1;
		if(pageId>1){
			str += "<a href="+path+"&pageId=" + to_tal + action +">首页</a>  ";
		}else{
			str += "";
		}
		if(pageId>1){
			str += "<a href="+path+"&pageId=" + prev + action +"><<上一页</a>  ";
		}else{
			str += "";
		}
		if(pageId<total){
			str += "<a href="+path+"&pageId=" + next + action+">下一页>></a>  ";
		}else{
			str += "";
		}
		if(pageId<total){
			str += "<a href="+path+"&pageId=" + total + action+">尾页</a>  ";
		}else{
			str += "";
		}
		str += "当前第<font color ='blue'>"+pageId+"</font>页  共<font color ='blue'>"+total+"</font>页  总<font color ='blue'>"+rows+"</font>条";
		return str;
	}

	/**
	 * 将一个页面需要显示的条目的集合写入session对象中
	 * @param request 
	 * @param response
	 * @param list 需要分页的所有条目的集合
	 * @param pagemethod 查询字符串,请不要以“?”开头,参考范例:<code>"command=key"</code>
	 * @param key 当前页面条目的对象的属性名
	 * @param pageSize  每页显示条数
	 */
	public void page(HttpServletRequest request,
			HttpServletResponse response,
			List list,
			String pagemethod,
			String key,
			int pageSize) {	
		//取得当前的页码
		String pageId = request.getParameter("pageId");

		String footer = "";
		//每页显示的记录
		List pageList = this.getPage(pageId, pageSize, list);
		//生成页码导航栏
		footer = this.getPageFooter(request.getRequestURI()+"?"+pagemethod,"");
			
		HttpSession session = request.getSession();
		session.setAttribute(key,pageList);
//	System.out.print("执行");
	//	System.out.println(session.getAttribute(key));
		session.setAttribute("footer", footer);
	}
}

 

在后台的调用页面这样用:


 

public void manageShowNews(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		List<News> newsList = Factory.CreateNewsDaoDemo().seekAllNews();
		PageService ps = new PageService();
		//按照每页10行进行分页,并且把分页后的这10条记录放到一个List对象中,然后通过一个名称为“news”的session传到页面中
		//session.setAttribute("news", List);
		//"action=list"告诉分页程序下一个操作需要调用的页面及查询字符串
		//newsList:代表分页的列表,即要分页所有的记录
		ps.page(request, response, newsList, "action=list", "news", 10);
		request.getRequestDispatcher("admin1/files/newsList.jsp").forward(request, response);
	}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值