一個完全用JSTL實現的JSP分頁方案
樣式是模仿Google的,我已經測試過了,
主要思想就是把分頁模塊用JSTL寫成一個INCLUDE文件,
然後在要分頁的頁面調用,
當然要傳入必要的五個分頁參數
--------------------------------------------
pager.inc.jsp文件如下:
----------------------------------------------------------------------------------------
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!--接收參數total,總記錄數-->
<c:set var="total" value="${param.total}"/>
<!--接收參數pageSize,每頁最多顯示的記錄數-->
<c:set var="pageSize" value="${param.pageSize}"/>
<!--接收參數pageEnumShow,每次枚舉的頁面索引數-->
<c:set var="pageEnumShow" value="${param.pageEnumShow}"/>
<!--接收參數pageUrl,要分頁的頁面URL-->
<c:set var="pageUrl" value="${param.pageUrl}"/>
<c:choose>
<c:when test="${total > 0}">
<c:choose>
<c:when test="${total % pageSize == 0}">
<c:set var="pageTotal" value="${total / pageSize}"/>
</c:when>
<c:otherwise>
<c:set var="pageTotal" value="${(total - total % pageSize) / pageSize + 1}"/>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${empty param.pageIndex}">
<c:set var="pageIndex" value="1"/>
</c:when>
<c:otherwise>
<c:set var="pageIndex" value="${param.pageIndex}"/>
</c:otherwise>
</c:choose>
<table cellpadding="2" cellspacing="0">
<tr>
<c:choose>
<c:when test="${pageTotal > pageEnumShow}">
<c:choose>
<c:when test="${pageTotal - pageEnumShow + 1 >= pageIndex}">
<c:set var="pageStart" value="${pageIndex}"/>
<c:set var="pageEnd" value="${pageIndex + pageEnumShow - 1}"/>
</c:when>
<c:otherwise>
<c:set var="pageStart" value="${pageTotal - pageEnumShow + 1}"/>
<c:set var="pageEnd" value="${pageTotal}"/>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:set var="pageStart" value="${pageIndex}"/>
<c:set var="pageEnd" value="${pageTotal}"/>
</c:otherwise>
</c:choose>
<c:if test="${pageIndex > 1}">
<td nowrap="nowrap">
<a href="${pageUrl}?pageIndex=${pageIndex - 1}">
<img alt="" src="images/prev.gif" border="0"/>
<br/>
<span style="font-size: 12pt;font-weight:bold">Previous</span>
</a>
</td>
</c:if>
<c:forEach begin="${pageStart}" end="${pageEnd}" var="i">
<td nowrap="nowrap">
<c:choose>
<c:when test="${i == pageIndex && pageIndex == 1}">
<img alt="" src="images/first.gif" border="0"/>
<br/>
1
</c:when>
<c:when test="${pageIndex != i}">
<a href="${pageUrl}?pageIndex=${i}">
<img alt="" src="images/page.gif" border="0"/>
<br/>
<c:out value="${i}"/>
</a>
</c:when>
<c:when test="${pageIndex == i && pageIndex != pageTotal}">
<img alt="" src="images/current.gif" border="0"/>
<br/>
<c:out value="${i}"/>
</c:when>
<c:when test="${pageIndex == pageTotal && pageIndex == i}">
<img alt="" src="images/last.gif" border="0"/>
<br/>
<c:out value="${pageIndex}"/>
</c:when>
</c:choose>
</td>
</c:forEach>
<c:if test="${pageIndex < pageTotal}">
<td nowrap="nowrap">
<a href="${pageUrl}?pageIndex=${pageIndex + 1}">
<img alt="" src="images/next.gif" border="0"/>
<br/>
<span style="font-size: 12pt;font-weight:bold">Next</span>
</a>
</td>
</c:if>
</tr>
</table>
</c:when>
<c:otherwise>
暫無任何記錄 !!
</c:otherwise>
</c:choose>
--------------------------------------------頁面調用實例(以Struts爲例)
<!--下面的這個JavaBean provider ,除了提供記錄集合之外,還要提供計算記錄總數的getter方法。我有一個簡單的計算記錄總數的思路就是讓JavaBean把記錄集保存爲一個Collection,然後在它的getTotal方法裏面簡單地返回Collecition.size()就可以了!-->
----------------------------------------------------------------------------------------
<jsp:useBean id="provider" scope="request" class="mylib.UserBean"></jsp:useBean>
<c:set var="items" scope="request" value="${provider.allItems}"/>
----------------------------------------------------------------------------------------
<c:catch var="exception"><!--捕捉異常-->
<c:set var="pageSize" value="5"/><!--定義每頁顯示的記錄數-->
<!--INCLUDE分頁文件-->
<c:import url="pager.inc.jsp">
<!--傳入分頁參數-->
<c:param name="total" value="${provider.total}"/>
<c:param name="pageSize" value="${pageSize}"/>
<c:param name="pageEnumShow" value="3"/>
<c:param name="pageUrl" value="index.jsp"/>
<c:param name="pageIndex" value="${param.pageIndex}"/>
</c:import>
<!--Iteration begin-->
<br/>
<br/>
<logic:iterate name="items" id="item" offset="${(param.pageIndex - 1) * pageSize}" length="${pageSize}">
<bean:write name="item" property="userName"/>
<br/>
</logic:iterate>
<!--Iteration end-->
</c:catch>
<!--檢測異常-->
<c:if test="${!empty exception}">
<font color="red">查詢過程中發生錯誤 !</font>
</c:if>
主要思想就是把分頁模塊用JSTL寫成一個INCLUDE文件,
然後在要分頁的頁面調用,
當然要傳入必要的五個分頁參數
--------------------------------------------
pager.inc.jsp文件如下:
----------------------------------------------------------------------------------------
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!--接收參數total,總記錄數-->
<c:set var="total" value="${param.total}"/>
<!--接收參數pageSize,每頁最多顯示的記錄數-->
<c:set var="pageSize" value="${param.pageSize}"/>
<!--接收參數pageEnumShow,每次枚舉的頁面索引數-->
<c:set var="pageEnumShow" value="${param.pageEnumShow}"/>
<!--接收參數pageUrl,要分頁的頁面URL-->
<c:set var="pageUrl" value="${param.pageUrl}"/>
<c:choose>
<c:when test="${total > 0}">
<c:choose>
<c:when test="${total % pageSize == 0}">
<c:set var="pageTotal" value="${total / pageSize}"/>
</c:when>
<c:otherwise>
<c:set var="pageTotal" value="${(total - total % pageSize) / pageSize + 1}"/>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${empty param.pageIndex}">
<c:set var="pageIndex" value="1"/>
</c:when>
<c:otherwise>
<c:set var="pageIndex" value="${param.pageIndex}"/>
</c:otherwise>
</c:choose>
<table cellpadding="2" cellspacing="0">
<tr>
<c:choose>
<c:when test="${pageTotal > pageEnumShow}">
<c:choose>
<c:when test="${pageTotal - pageEnumShow + 1 >= pageIndex}">
<c:set var="pageStart" value="${pageIndex}"/>
<c:set var="pageEnd" value="${pageIndex + pageEnumShow - 1}"/>
</c:when>
<c:otherwise>
<c:set var="pageStart" value="${pageTotal - pageEnumShow + 1}"/>
<c:set var="pageEnd" value="${pageTotal}"/>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:set var="pageStart" value="${pageIndex}"/>
<c:set var="pageEnd" value="${pageTotal}"/>
</c:otherwise>
</c:choose>
<c:if test="${pageIndex > 1}">
<td nowrap="nowrap">
<a href="${pageUrl}?pageIndex=${pageIndex - 1}">
<img alt="" src="images/prev.gif" border="0"/>
<br/>
<span style="font-size: 12pt;font-weight:bold">Previous</span>
</a>
</td>
</c:if>
<c:forEach begin="${pageStart}" end="${pageEnd}" var="i">
<td nowrap="nowrap">
<c:choose>
<c:when test="${i == pageIndex && pageIndex == 1}">
<img alt="" src="images/first.gif" border="0"/>
<br/>
1
</c:when>
<c:when test="${pageIndex != i}">
<a href="${pageUrl}?pageIndex=${i}">
<img alt="" src="images/page.gif" border="0"/>
<br/>
<c:out value="${i}"/>
</a>
</c:when>
<c:when test="${pageIndex == i && pageIndex != pageTotal}">
<img alt="" src="images/current.gif" border="0"/>
<br/>
<c:out value="${i}"/>
</c:when>
<c:when test="${pageIndex == pageTotal && pageIndex == i}">
<img alt="" src="images/last.gif" border="0"/>
<br/>
<c:out value="${pageIndex}"/>
</c:when>
</c:choose>
</td>
</c:forEach>
<c:if test="${pageIndex < pageTotal}">
<td nowrap="nowrap">
<a href="${pageUrl}?pageIndex=${pageIndex + 1}">
<img alt="" src="images/next.gif" border="0"/>
<br/>
<span style="font-size: 12pt;font-weight:bold">Next</span>
</a>
</td>
</c:if>
</tr>
</table>
</c:when>
<c:otherwise>
暫無任何記錄 !!
</c:otherwise>
</c:choose>
--------------------------------------------頁面調用實例(以Struts爲例)
<!--下面的這個JavaBean provider ,除了提供記錄集合之外,還要提供計算記錄總數的getter方法。我有一個簡單的計算記錄總數的思路就是讓JavaBean把記錄集保存爲一個Collection,然後在它的getTotal方法裏面簡單地返回Collecition.size()就可以了!-->
----------------------------------------------------------------------------------------
<jsp:useBean id="provider" scope="request" class="mylib.UserBean"></jsp:useBean>
<c:set var="items" scope="request" value="${provider.allItems}"/>
----------------------------------------------------------------------------------------
<c:catch var="exception"><!--捕捉異常-->
<c:set var="pageSize" value="5"/><!--定義每頁顯示的記錄數-->
<!--INCLUDE分頁文件-->
<c:import url="pager.inc.jsp">
<!--傳入分頁參數-->
<c:param name="total" value="${provider.total}"/>
<c:param name="pageSize" value="${pageSize}"/>
<c:param name="pageEnumShow" value="3"/>
<c:param name="pageUrl" value="index.jsp"/>
<c:param name="pageIndex" value="${param.pageIndex}"/>
</c:import>
<!--Iteration begin-->
<br/>
<br/>
<logic:iterate name="items" id="item" offset="${(param.pageIndex - 1) * pageSize}" length="${pageSize}">
<bean:write name="item" property="userName"/>
<br/>
</logic:iterate>
<!--Iteration end-->
</c:catch>
<!--檢測異常-->
<c:if test="${!empty exception}">
<font color="red">查詢過程中發生錯誤 !</font>
</c:if>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.