一個完全用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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章