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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本功能是以读书管理为例子而实现的翻页功能,目的希望大家很够很容易掌握它,同时将它学会。希望能给大家带来方便! Web应用开发的JavaServer Pages技术方法 在开发JSP规范的过程中,太阳微系统公司(Sun Microsystems Inc.)与许许多多主要的Web服务器、应用服务器和开发工具供应商,以及各种各样富有经验的开发团体进行合作。其结果是找到了一种为应用和页面开发人员平衡了可移植性和易用性的开发方法。 JSP技术在多个方面加速了动态Web页面的开发: 将内容的生成和显示进行分离 使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容(内容是根据请求来变化的,例如请求帐户信息或者特定的一瓶酒的价格)。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。 在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBCTM技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。 强调可重用的组件 绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者Enterprise JavaBeansTM组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。 采用标识简化页面开发 Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。 通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值