import java.sql.ResultSet
public class rsFenYe {
ResultSet rs=null //要分页处理的记录数
int currentPage=1 //当前页码
int pageSize=10 //每页记录的条数,默认为10
/**
* 得到分页字串,并把记录指针移到当前页的第一条记录的前面的位置
* 输入:返回的JSP页面,refName 数组为超链接中继 currentPage 之后的参数名,refValue为对应值
* 输出:字符串“共2页,当前第1页 下一页 末页”
*/
public String earn_fenye_string(String returnJSP){
String returnString=new String("")
if(rs==null){
return returnString
}
int pageCount=0 //总页数
int rowCount=0 //rs的总记录条数
if(pageSize<=0){ //每页记录条数不正确
return returnString
}
try {
//------得到记录总条数--------
rs.last()
rowCount=rs.getRow()
rs.beforeFirst()
//------记录指针移位----------
int RecordPosition=(currentPage-1)*pageSize
if(RecordPosition==0){
rs.beforeFirst()
}else{
rs.absolute(RecordPosition)
}
}catch(Exception e){
System.out.println(e)
return returnString
}
//-------得到总页数-----
if(rowCount%pageSize==0){
pageCount=rowCount/pageSize
}else{
pageCount=rowCount/pageSize+1
}
//-------得到返回字符串--------
returnString="共"+pageCount+"页,当前第"+currentPage+"页 "
if(currentPage!=1 &&pageCount!=0){ //不是首页且总页数不为0
returnString=returnString+"<a href='"+returnJSP+"?currentPage=1"
returnString=returnString+"'>首页</a> "
returnString=returnString+"<a href='"+returnJSP+"?currentPage="+(currentPage-1)
returnString=returnString+"'>上一页</a> "
}
if(currentPage!=pageCount&&pageCount!=0){ //不是末页且总页数不等于0
returnString=returnString+"<a href='"+returnJSP+"?currentPage="+(currentPage+1)
returnString=returnString+"'>下一页</a> "
returnString=returnString+"<a href='"+returnJSP+"?currentPage="+pageCount
returnString=returnString+"'>末页</a> "
}
return returnString
}
public ResultSet getRs() {
return rs
}
public void setRs(ResultSet rs) {
this.rs = rs
}
public int getCurrentPage() {
return currentPage
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage
}
public int getPageSize() {
return pageSize
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize
}
}
在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
}
运行效果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)