jsp分页页码组件

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE>
<html>
  
  <body>
  
  	<%
  	/**
		JSP页码显示模块
		
		使用示例:
			<jsp:include page="components/pageNumber.jsp">
				<jsp:param name="itemSum" value="11"/> 
				<jsp:param name="pageUrl" value="back/MyJsp.jsp?parmar1=abc&parmar2=cde"/> 
	    	</jsp:include> 
	    参数:
	    	itemSum:元素的总个数
	    	pageUrl:每一页共同地址
	    	
	    引用页码获取参数:
	    String pageIndexStr = request.getParameter("pageIndex");
		String pageCountStr = request.getParameter("pageCount");
		int pageIndex = 0;
		int pageCount = 0;
		if (pageIndexStr != null)
			pageIndex = Integer.parseInt(pageIndexStr);
		if (pageCountStr != null)
			pageCount = Integer.parseInt(pageCountStr);
		
		当前页:pageIndex(0~n)
		每页显示的个数:pageCount(1~n)
		
		注意:
			id和js方法的命名空间:“pageNumber_”
	*/
  	%>
   
  	<script type="text/javascript">
    	function pageNumber_goto() {
    		var pageNum = document.getElementById('pageNumber_pageNum').value;
    		var pageUrl = document.getElementById('pageNumber_pageUrl').value;
    		var i=document.getElementById('pageNumber_pageInput').value;
    		if (isNaN(i)) {
    			alert("输入的页码不合法,请输入 1~"+(pageNum+1)+" 的数字");
    			document.getElementById('pageNumber_pageInput').value='';
    			return;
    		}
    		pageNum = parseInt(pageNum);
    		i = parseInt(i);
    		if (i >= 1 && i <= pageNum+1) {
    			self.location = pageUrl + '&pageIndex=' + (i-1);
    		} else {
    			alert("输入的页码不合法,请输入 1~"+(pageNum+1)+" 的数字");
    			document.getElementById('pageNumber_pageInput').value='';
    			return;
    		}
    	}
    </script>
    
    <%
    	// 运行参数:最大显示的页码个数
    	int maxShowPageNum = 6;
		int pageIndexDef = 0;
		int pageCountDef = 10;
    
    	// 获取父页面传来的参数
    	// 从参数获取元素总个数
    	int itemSum = Integer.parseInt(request.getParameter("itemSum"));
    	// 转向的地址(包含其它参数)
    	String pageUrl = request.getParameter("pageUrl");
    	
    	// 获取上次分页传来的参数
    	String pageCountStr = request.getParameter("pageCount");
    	String pageIndexStr = request.getParameter("pageIndex");
    	
    	// 解析参数
    	int pageCount = pageCountDef;
    	int pageIndex = pageIndexDef;
    	if (pageCountStr != null) pageCount = Integer.parseInt(pageCountStr);
    	if (pageIndexStr != null) pageIndex = Integer.parseInt(pageIndexStr);
    	if (pageUrl.indexOf("?") == -1) {
    		pageUrl = pageUrl + "?pageCount="+pageCount;
    	} else {
    		pageUrl = pageUrl + "&pageCount="+pageCount;
    	}
    	
    	// 计算总页数
    	int pageNum = (int) (itemSum / pageCount + 0.5);
    	if (pageCount * (pageNum - 1) == itemSum) 
    		pageNum = pageNum-1;
    %>
    
    <!-- 向js传递参数 -->
    <input type="hidden" id="pageNumber_pageNum" value="<%=pageNum %>">
    <input type="hidden" id="pageNumber_pageUrl" value="<%=pageUrl %>">
    
    <!-- 显示元素的总数量 -->
    <input disabled="disabled" value="<%=itemSum %>" style="width:40px;">
    
    <!-- 显示当前多少页和总共多少页 -->
    <input disabled="disabled" value="<%=""+(pageIndex+1)+"/"+(pageNum+1) %>" style="width:50px;">
    
    <!-- 如果当前页大于最大显示的页数(第一页页码不可见),显示回到第一页 -->
    <%
    	if (pageIndex > (maxShowPageNum / 2)) {
    %>
    		<a 
    			href="<%=pageUrl+"&pageIndex="+0 %>"
    		><%="|<" %></a>
    <%
    	}
    %>
    
    <!-- 如果不是在第一页,显示向上一页 -->
    <%
    	if (pageIndex > 0) {
    %>
    		<a 
    			href="<%=pageUrl+"&pageIndex="+(pageIndex-1) %>"
    		><%="<<" %></a>
    <%
    	}
    %>
    
    <!-- 显示页码 -->
    <%
    	int startPage = 0;
    	int endPage = 0;
    	if ( pageIndex <= maxShowPageNum / 2 ) {
    		// 如果当前页码小于显示最大页码数的一半
    		startPage = 1;
    		if (pageNum <= maxShowPageNum) {
    			endPage = pageNum+1;
    		} else {
    			endPage = maxShowPageNum;
    		}
    	} else if ( pageIndex > (pageNum - maxShowPageNum / 2) ) {
    		// 如果当前页面大于最大页数-显示最大页码数的一半
    		startPage = pageNum - maxShowPageNum;
    		endPage = pageNum;
    	} else {
    		// 否则,保持当前页码在输出页码数的中间
    		startPage = pageIndex - maxShowPageNum / 2 + 1;
    		endPage = pageIndex + maxShowPageNum / 2;
    	}
    	if (startPage < 1) startPage = 1;
    	if (endPage > (pageNum+1)) endPage = (pageNum+1);
    %>
    <%
    	for (int i=startPage; i<=endPage; i++) {
    		if (i == (pageIndex+1)) {
    %>
    			<%=i %>
    <%
    		} else {
    %>
	    		<a 
	    			href="<%=pageUrl+"&pageIndex="+(i-1) %>"
	    		><%=i %></a>
    <%
    		}
    	}
    %>
    
    <!-- 如果不是最后一页,显示下一页按钮 -->
    <%
    	if (pageIndex < (pageNum)) {
    %>
    		<a 
    			href="<%=pageUrl+"&pageIndex="+(pageIndex+1) %>"
    		><%=">>" %></a>
    <%
    	}
    %>
    
    <!-- 如果小于最大页数-支持显示的页码数,显示到最后一页 -->
    <%
    	if (pageIndex < (pageNum - maxShowPageNum / 2) ) {
    %>
    		<a 
    			href="<%=pageUrl+"&pageIndex="+(pageNum) %>"
    		><%=">|" %></a>
    <%
    	}
    %>
    
    <!-- 显示页码输入框 -->
    <input 
    	id="pageNumber_pageInput"
    	type="text" 
    	value="<%=(pageIndex+1) %>"
    	onclick="document.getElementById('pageNumber_pageInput').value='';"	
    	onkeydown="if(event.keyCode==13){pageNumber_goto()}"
    	style="width:40px;"
    >
    <button 
    	onclick="pageNumber_goto()"
    >转到</button>
    
    
  </body>
</html>
posted @ 2011-11-22 15:54  石莹  阅读(7185)  评论(0编辑  收藏  举报