jsp 如何将查询结果实现分页,最好简单易懂…

JavaScript027

jsp 如何将查询结果实现分页,最好简单易懂…,第1张

jsp中分页最快捷的办法是用分页组件:

分页组件代码使用taglib实现的:

<%@ tag language="java" pageEncoding="UTF-8"%>

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c"%>

<%@ attribute name="curIndex" type="java.lang.Long" required="true"%>

<%@ attribute name="pageSize" type="java.lang.Long" required="true"%>

<%@ attribute name="pagerRange" type="java.lang.Long" required="true"%>

<%@ attribute name="totalPage" type="java.lang.Long" required="true"%>

<%@ attribute name="formId" type="java.lang.String" required="true"%>

<%

long begin = Math.max(1, curIndex - pagerRange/2)

long end = Math.min(begin + (pagerRange-1),totalPage)

request.setAttribute("p_begin", begin)

request.setAttribute("p_end", end)

%>

<table class="pager">

<tr>

<% if (curIndex!=1){%>

<td><a href="javascript:gotoPage(1)">首页</a></td>

<td><a href="javascript:gotoPage(<%=curIndex-1%>)">上一页</a></td>

<%}else{%>

<td class="disabled"><a href="#">首页</a></td>

<td class="disabled"><a href="#">上一页</a></td>

<%}%>

<c:forEach var="i" begin="${p_begin}" end="${p_end}">

<c:choose>

<c:when test="${i == curIndex}">

<td class="active"><a href="#">${i}</a></td>

</c:when>

<c:otherwise>

<td><a href="javascript:gotoPage(${i})">${i}</a></td>

</c:otherwise>

</c:choose>

</c:forEach>

<% if (curIndex!=totalPage){%>

<td><a href="#">下一页</a></td>

<td><a href="#">末页</a></td>

<%}else{%>

<td class="disabled"><a href="javascript:gotoPage(<%=curIndex+1%>)">下一页</a></td>

<td class="disabled"><a href="javascript:gotoPage(<%=totalPage%>)">末页</a></td>

<%}%>

<td><a>共${totalPage}页</a></td>

<td class="input_li">跳转到:<input type="text" id="p_pageIndex" size="2" value="<c:out value="${pageIndex}"/>"/>页 <input type="button" id="gotoBtn" onclick="gotoPageByBtn()" value="GO"/></td>

<td class="input_li">每页:

<select id="p_pageSizeSelect" onchange="gotoPage(<%=curIndex%>)">

<option value="10" <c:if test="${pageSize==10}">selected</c:if>>10条</option>

<option value="20" <c:if test="${pageSize==20}">selected</c:if>>20条</option>

<option value="50" <c:if test="${pageSize==50}">selected</c:if>>50条</option>

</select>

</td>

</tr>

</table>

jsp中使用方法:

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c"%>

<%@ taglib uri="/WEB-INF/tld/fmt.tld" prefix="fmt"%>

<%@ taglib tagdir="/WEB-INF/tags" prefix="tags"%>

<head>

<style><!--分页样式-->

.pager { font: 12px Arial, Helvetica, sans-serif}

.pager a {padding: 1px 6pxborder: solid 1px #dddbackground: #ffftext-decoration: nonemargin-right:2pxline-height:30pxvertical-align:middle}

.pager .active a{color:redborder:none}

.pager a:visited {padding: 1px 6pxborder: solid 1px #dddbackground: #ffftext-decoration: none}

.pager a:hover {color: #fffbackground: #ffa501border-color:#ffa501text-decoration: none}

.pager .input_li{padding: 1px 6px}

</style>

<script><!--分页跳转脚本-->

function gotoPage(pageIndex){

var queryForm = document.getElementById("queryForm")

var action = queryForm.action

var pageSize = document.getElementById("p_pageSizeSelect").value

action += "?pageIndex=" + pageIndex + "&pageSize=" + pageSize

//alert(action)

queryForm.action = action

queryForm.submit()

}

function gotoPageByBtn(){

var pageIndex = document.getElementById("p_pageIndex").value

var pageIndexInt = parseInt(pageIndex)

var totalPage = ${totalPage}

if(pageIndexInt>0 &&pageIndexInt<totalPage){

gotoPage(pageIndex)

}

else{

alert("输入页数超出范围!")

}

}

</script>

</head>

<body>

<form id="queryForm" action="${basePath}/log/list" method="post">

<table>

<tr>

<td>用户名:</td>

<td><input type="text" name="userName" value="<c:out value="${userName}"/>"/></td>

<td><input type="submit" text="查询"/></td>

</tr>

</table>

</form>

<tags:pager pagerRange="10" pageSize="${pageSize}" totalPage="${totalPage}" curIndex="${pageIndex}" formId="queryForm"></tags:pager>

<table class="border">

<thead>

<tr>

<th width="100">用户名称</th>

<th width="500">操作内容</th>

<th width="200">操作时间</th>

</tr>

</thead>

<tbody>

<c:forEach items="${logList}" var="log">

<tr>

<td>${log.userName}</td>

<td>${log.result}</td>

<td>

<fmt:formatDate value="${log.createTime}" pattern="yyyy-MM-dd HH:mm:ss"/>

</td>

</tr>

</c:forEach>

</tbody>

</table>

<tags:pager pagerRange="10" pageSize="${pageSize}" totalPage="${totalPage}" curIndex="${pageIndex}" formId="queryForm"></tags:pager>

</body>

在servlet的service()方法中只需进行如下操作:

PageControl  pageCtl = yourBusinessObject.listData(req.getParameter("jumpPage"))

req.setAttribute("pageCtl",pageCtl)

说明:yourBusinessObject封装了商业逻辑,是位于Business Logic Layer中的一个对象,运用OOAD的方法,封装商业对象,在Persistent Layer之上组建坚实的Business Logic Layer同样是构建大型电子商务架构的关键所在。本文的关注点只是分页处理,暂不详细论述.

在每个想要实现翻页显示数据的jsp页面中,我们的工作也很简单,其代码是公式化的:

<jsp:useBean id="pageCtl" class="yourpackage.PageControl" scope="request"></jsp:useBean>

<%if(pageCtl.maxPage!=1)){%>

<form name="PageForm"  action="/servlet/yourpackage.yourservlet" method="post">

<%@ include file="/yourpath/pageman.jsp"%>

</form>

<%}%>

说明:

if(pageCtl.maxPage!=1)实现了这样一个逻辑:如果所取得数据不足一页,那么就不用进行翻页显示。

我们注意到<%@ include file="/yourpath/pageman.jsp"%>这使得真正的翻页部分完全得到了重用.

那么pageman.jsp到底做了些什么呢?它实现了经常做翻页处理的人耳熟能详的逻辑 

(A)第一页时不能再向前翻; 

(B)最后一页时不能再向后翻; 

同时能够进行页面任意跳转,具体代码如下:

每页<%=pageCtl.rowsPerPage%>行

共<%=pageCtl.maxRowCount%>行

第<%=pageCtl.curPage%>页

共<%=pageCtl.maxPage%>页

<BR>

<%if(pageCtl.curPage==1){ out.print(" 首页 上一页")  }else{  %> 

<A HREF="javascript:gotoPage(1)">首页</A>

<A HREF="javascript:gotoPage(<%=pageCtl.curPage-1%>)">上一页</A>

<%}%>

<%if(pageCtl.curPage==pageCtl.maxPage){ out.print("下一页 尾页")  }else{  %> 

<A HREF="javascript:gotoPage(<%=pageCtl.curPage+1%>)">下一页</A>

<A HREF="javascript:gotoPage(<%=pageCtl.maxPage%>)">尾页</A>

<%}%>

转到第<SELECT name="jumpPage" onchange="Jumping()">

    <% for(int i=1i<=pageCtl.maxPagei++)  {

    if (i== pageCtl.curPage){

    %>

    <OPTION selected value=<%=i%>><%=i%></OPTION>

    <%}else{%>

    <OPTION value=<%=i%>><%=i%></OPTION>

    <%}}%> 

    </SELECT>页

最后附上用于页面跳转的javascript公共函数:

function Jumping(){

 document.PageForm.submit()

 return

}

function gotoPage(pagenum){

 document.PageForm.jumpPage.value = pagenum

 document.PageForm.submit()

 return

}

运行效果: