`

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics