struts2 java分页

  第二次修改了分页代码,解决了一些小bug,此代码还在测试中,欢迎指出问题。。。
如果你不是使用AJAX分页,请将jsp页面中超链接的js替换成action请求地址即可。
这是ajaxPageInfo.java
package com.dwh.common.sys;

import org.apache.struts2.ServletActionContext;
/*
 * 分页查找类
 * 
 * 说明,如果要应用于ajax,在数据访问层应该用上如下参数
 * 
 * 		//分页需要的一些参数
		String requestURI="queryPurchaseMuti";//应用请求地址
		String queryString="";//参数
		Iterator iter = m.entrySet().iterator();  
		while (iter.hasNext()) {  
		Map.Entry entry = (Map.Entry) iter.next(); 
		  if(!entry.getKey().equals("cur_arg")){
			Object key = entry.getKey();  
			Object val = entry.getValue(); 
			queryString+="&"+key+"="+val;
		  }
		}  
		purchase.setPageUrl(requestURI, queryString);
		purchase.setPageSize(2);//设置每页显示的数量为2
		purchase.setSumRows(8);//查出当前项目为8页
 * 
 * 
 */
public class AjaxPageInfo {
	/**当前页数*/
	private int currentPage;	
	/**每页显示数量 */
	private int pageSize =10;
	/**总共有多少页*/
	private int sumPages;
	/**总记录数*/
	private int sumRows;	
	/**点击下一页的应用地址*/
	private String pageUrl;	
	/**当前开始记录数*/
	private int startRow;	
	/**当前结束记录数*/
	private int endRow;
	
	/**前台从第几页开始显示**/
	private int beginPage;
	/**前台到第几页结束显示**/
	private int endPage;
	/**前台一次展现几个Page链接**/
	private int pageNumber=10;//前台一次展现10个页面链接

	
	/**
	 * 得到当前页码
	 * @return
	 */
	public int getCurrentPage() {
		return currentPage;
	}
	/**
	 * 设置当前页码
	 * @param currentPage
	 */
	public void setCurrentPage(String curPage) {
		if(curPage==null||curPage.equals("")){//没有指定当前页的情况下,默认为0,适应第一页
			this.currentPage=0;
		}else{
			currentPage=Integer.parseInt(curPage);
		}
		this.currentPage = currentPage < 1 ? 0 : currentPage;//当前页通过浏览器参数传过来
		this.startRow=currentPage*pageSize;				//设置起始记录数,0开始为第一页的内容
		this.endRow=startRow+pageSize;
		setPageUrl();										//启动获取页数
	}
	/**
	 * 得到每页行数
	 * @return
	 */
	public int getPageSize() {
		return pageSize;
	}
	/**
	 * 设置每页行数
	 * @param rowsPage
	 */
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	/**
	 * 得到总页数
	 * @return
	 */
	public int getSumPages() {
		return sumPages;
	}
	/**
	 * 设置总页数
	 * @param sumPages
	 */
	public void setSumPages(int sumPages) {
		this.sumPages = sumPages;
	}
	/**
	 * 得到总行数
	 * @return
	 */
	public int getSumRows() {
		return sumRows;
	}
	/**
	 * 设置总行数
	 * @param sumRows
	 */
	public void setSumRows(int sumRows) {
		this.sumRows = sumRows;
		if(sumRows%pageSize==0){//刚好整除
			this.sumPages=sumRows/pageSize;//算出总页数
		}
		if(sumRows%pageSize>0){//余数为正
			this.sumPages=sumRows/pageSize+1;
		}
		if(sumRows%pageSize<0){//余数为负
			this.sumPages=sumRows/pageSize;
		}
		
	}
	public void setSumRows(int sumRows,int begin,int end) {//设置页面展现链接规则
		this.sumRows = sumRows;
		if(sumRows%pageSize==0){//刚好整除
			this.sumPages=sumRows/pageSize;//算出总页数
		}
		if(sumRows%pageSize>0){//余数为正
			this.sumPages=sumRows/pageSize+1;//(sumRows/pageSize)+1页
		}
		if(sumRows%pageSize<0){//余数为负
			this.sumPages=sumRows/pageSize;
		}
		this.beginPage=begin;
		this.endPage=end;
		
		
		if(sumPages<pageNumber){//总页数比指定页数还小的时候
			this.pageNumber=sumPages;
		}

		//求得链接集开始页码和结束页码
		if(pageNumber<sumPages){
			if(currentPage>0){		
				this.beginPage=(currentPage/pageNumber)*pageNumber;//去除余数的整数*pageNumber
				this.endPage=beginPage+pageNumber;
			}else{
				this.beginPage=1;
				this.endPage=pageNumber;
			}
		}else{
			this.beginPage=1;
			this.endPage=pageNumber;
		}
		//点击当前分页末端链接	
		if((currentPage+1)%pageNumber==0){
			if(sumPages>pageNumber){//只有当总页数大于每页显示链接数时开始链接才累加
				this.beginPage=currentPage+1;
			}else{
				this.beginPage=begin;
			}
			if(sumPages-currentPage>pageNumber){//当前页不是第一个链接集合页
				this.endPage=currentPage+11;
			}else{
				this.endPage=sumPages;
			}
		}
		//点击当前分页最前端链接
		if(beginPage==currentPage+1&&currentPage!=0&&(currentPage+1)%pageNumber==0){
			if(currentPage+1==begin){
				if(currentPage+1!=pageNumber){//如果不为第二个链接页
				this.beginPage=(currentPage+1)-pageNumber;
				}else{
				this.beginPage=(currentPage+2)-pageNumber;	//如果要跳到第一页去
				}
				this.endPage=currentPage+1;
			}
		}
		
		if(currentPage == sumPages-1){//如果是尾页,算出页面链接的开始和结束
			if(sumPages==1){
				this.beginPage = 1;
				this.endPage =1;
			}else{
				if(sumPages>pageNumber){
					this.beginPage = sumPages - (sumPages % pageSize);//得到,总数减余数	
				}
				this.endPage = sumPages;
			}
				
		}
		
		
	//	System.out.println("开始页:"+beginPage);
	//	System.out.println("结束页:"+endPage);
		
	}
	/**
	 * 设置应用地址
	 * @return 拼接的应用地址加参数
	 */
	public String getPageUrl() {
		return pageUrl;
	}
	public void setPageUrl() {
		String pageURl =  ServletActionContext.getRequest().getRequestURI()+"?a=a";
		pageURl +="&"+ServletActionContext.getRequest().getQueryString();
		pageURl=pageURl.replaceAll("&curPage="+currentPage,"");//去除页面重复参数
		if(pageURl.contains("a=a&")){						   //去除页面重复参数
			pageURl=pageURl.replaceAll("a=a&", "");
		}else{
			pageURl=pageURl.replaceAll("a=a", "");
		}
		this.pageUrl = pageURl;
	}
	/**setPageUrl()的重载
	 * @param requestURI js截取的uri
	 * @param queryString  js截取的参数
	 * */
	public void setPageUrl(String requestURI,String queryString) {
		String pageURl =  requestURI+"?a=a";
		pageURl +="&"+queryString;
		pageURl=pageURl.replaceAll("&curPage="+currentPage,"");//去除页面重复参数
		if(pageURl.contains("a=a&")){						   //去除页面重复参数
			pageURl=pageURl.replaceAll("a=a&", "");
		}else{
			pageURl=pageURl.replaceAll("a=a", "");
		}
		this.pageUrl = pageURl;
	}

	
	public int getStartRow() {
		return startRow;
	}
	public void setStartRow(int startRow) {
		this.startRow = startRow;
	}
	public int getEndRow() {
		return endRow;
	}
	public void setEndRow(int endRow) {
		this.endRow = endRow;
	}
	public int getBeginPage() {
		return beginPage;
	}
	public int getPageNumber() {
		return pageNumber;
	}
	public void setPageNumber(int pageNumber) {
		this.pageNumber = pageNumber;
	}
	public void setBeginPage(int beginPage) {
		if(currentPage==0){//第一次运行分页代码
			this.beginPage=1;
		}
		this.beginPage = beginPage;
	}
	public int getEndPage() {
		return endPage;
	}
	public void setEndPage(int endPage) {
		if(currentPage==0){//第一次运行分页代码
			this.endPage=pageNumber;
		}
		this.endPage = endPage;
	}

}



这是pageinfo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
	isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<head>
<style type="text/css">
DIV.scott A.actives {
	BORDER-RIGHT: #85bd1e 1px solid; BORDER-TOP: #85bd1e 1px solid; BORDER-LEFT: #85bd1e 1px solid; COLOR: #638425; BORDER-BOTTOM: #85bd1e 1px solid; BACKGROUND-COLOR: #f1ffd6; text-decoration:none;
}
</style>
</head>

<link href="${pageContext.request.contextPath}/lib/common/css/pageInfo.css" type="text/css" rel="stylesheet">

<div class="scott" id="showPage" style="height: 28px;">
	<s:if test="currentPage>0">
		<a href="javascript:ajaxQuery('${pageUrl}&currentPage=0');">首页</a>|
        <a href="javascript:ajaxQuery('${pageUrl}&currentPage=${currentPage-1}');">上一页</a>|
    </s:if>
	<s:else>首页| 上一页|</s:else>
	
	<!-- 中间分第几页显示 -->
			<s:bean name="org.apache.struts2.util.Counter" id="counter">
			<s:param name="first" value="beginPage" />
			<s:param name="last" value="endPage" />
			<s:iterator>
			<s:if test="currentPage+1==current-1">
			<a class="actives" href="javascript:ajaxQuery('${pageUrl}&currentPage=${current-2}');"><s:property /></a>
			</s:if>
			<s:else>
			<a href="javascript:ajaxQuery('${pageUrl}&currentPage=${current-2}');"><s:property /></a>
			</s:else>
			</s:iterator>
			</s:bean>

	<!-- 中间分页结束 -->
	<s:if test='currentPage+1 < sumPages'>
		<a href="javascript:ajaxQuery('${pageUrl}&currentPage=${currentPage+1}');">下一页</a>|
        <a href="javascript:ajaxQuery('${pageUrl}&currentPage=${sumPages-1}');">尾页 
		</a>
	</s:if>
	<s:else>下一页| 尾页 </s:else>

	共${sumPages}页/共${sumRows}条 第
	<input id="load" type="text" size="3" value="" onkeyup="loadUrl(this.value)">
	页
	<a href="javascript:;" onclick="loadUrl2(document.getElementById('load').value);">确定</a>
</div>

<script type="text/javascript">
//ajax 要加载的请求
	function ajaxQuery(url){
	url+="&beginPage="+${beginPage}+"&endPage="+${endPage};
		$.ajax({
			url:url,
			type:"get",
			cache:false,
			success:function(data){//对应ajax处理			
				var selectFetchType=$('#fetchType').find("option:selected").text();
				$('#content').html(data);//向指定显示内容位置写入jsp文件
				$('#queryName').html(selectFetchType);	
				$('#queryName').width(100);
			}
			});
	}
	function loadUrl(str) {
		//首先判断是否为数字,不为数字提示,输入不可非数字 
		if (window.event) {//判断事件
			var keyCode = window.event.keyCode;
			if (keyCode == 13 && str != false) {//回车事件
				//首先判断是否为数字,不为数字提示,输入不可非数字 
				var str = isNumber(str);
				if (str == false) {
					alert("页数不可以为负数或非数字");
					return false;
				}
				var sumPages = '${sumPages}';
				str = parseInt(str);
				if (str > sumPages || str < 1) {
					alert("没有这个页数 ");
					return false;
				}//oracle数据库,不用在这里str加1
				str = str - 1;//如果是ORACLE数据库,这里不用减1,下标是从1开始的 
				ajaxQuery('${pageUrl}&currentPage='+str);
			}
		}
	}
	function loadUrl2(str) {
		//首先判断是否为数字,不为数字提示,输入不可非数字 
		var str = isNumber(str);
		if (str == false) {
			alert("页数不可以为负数或非数字");
			return false;
		}
		var sumPages = '${sumPages}';
		str = parseInt(str);
		if (str > sumPages || str < 1) {
			alert("没有这个页数 ");
			return false;
		}//oracle数据库,不用在这里str加1
		str = str-1;
		ajaxQuery('${pageUrl}&currentPage='+str);
	}

	/*调整样式 */
	var currentPage = '${currentPage}';
	function showCurrent() {
		var page = document.getElementById("showPage");
		if (currentPage != "") {
			var cssPage = page.getElementsByTagName("span");
			if (currentPage < cssPage.length) {
				cssPage[currentPage].className = "current";
			}
		}
	}
	showCurrent();

	/*判断是否为数字*/
	function isNumber(str) {
		var Letters = "1234567890.";
		for ( var i = 0; i < str.length; i = i + 1) {
			var CheckChar = str.charAt(i);
			if (Letters.indexOf(CheckChar) == -1) {
				return false;
			}
		}
		return str;
	}
</script>



你可能感兴趣的:(struts2)