样式是模仿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>
-----------------------------------------------------------------------------------------
大家有什么想法可以给我提,谢谢了

解决方案 »

  1.   

    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}"/>param是什么啊?
      

  2.   

    (total - total % pageSize) / pageSize + 1不能理解,能解释一下吗?
      

  3.   

    TO 楼上
    应该在JSTL里面没有强制地规定数据类型,
    而且据我了解好像JSTL里面也没有特定的转换数据类型的方法,
    所以按通常的习惯本来应该是 total / pageSize + 1就可以了
    可在JSTL里面,算出来是小数就是小数,它不会自动化为整数,
    所以我就用了 (total - total % pageSize) / pageSize + 1
    意思是先减去多余的那部分,然后加1哪位有更好的方法可以提,但是前提是不出现Scriplet,只能用JSTL
      

  4.   

    TO  ActiveT2(小陈)
    param 是 JSTL 里面预置的一个对象啊
    它等同于request对象....