在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
}
运行效果:
在获取完所有的list后只需要截取你所需要的一部分list就可以了,所以要知道你所需要的是从哪里开始,到哪里结束。有很多种方法,如果只是JSP里的话可以再次遍历获取的所有list集合,然后把满足条件的截取出来,开始的list下标应该是:(你要查询的页数-1)*页面要显示的数据条数,也就是你这里的(page-1)*pageRows,结束的地方也就是page*pageRows-1了。//这样应该可以写出来了吧
建议把这个方法封装到一个类里面,一个方法就实现一种功能。
当然这是比较麻烦的,现在流行框架,以后会学到的,在hibernate框架里用query语句很容易就实现了,现在时间多,
多看看hibernate框架吧,推荐你一本书,hibernate
in
action,有中文版的。这个是你们以后入门了hibernate后看的。
public
List
listOrderByItem(int
pageRows,int
page)
{
//page是要显示的页数,pageRows是你要显示的行数
Session
session
=
this.getSession()//获取hibernate的session,hibernate自动生成的DAO里包含
String
hql
=
"from
TBL_storage
as
tbl_s
order
by
item"//hql语句
Query
query
=
session.createQuery(hql)//hibernate的query,通过session创建
query.setFirstResult((page-1)*pageRows)//设置开始的下标
query.setMaxResults(pageRows)//设置每页显示的行数
return
query.list()//得到所需要的结果集
}
需要三个步骤:第一步,用php连接数据库;第二步,用sql语句查询数据并把查询出来的结果存入到一个数组或对象中。
第三步,显示数据。
下面我就用面向过程的编程方式来显示数据。这里我用网页中的表格来显示数据。你可以根据你自己的需要来选择显示的方式。
?php
$conn=mysql_connect("localhost","用户名",”密码“)
//连接数据库,用户名、密码即数据库的用户名和密码
mysql_select_db("数据库名")
//选择你要查询的数据库的名称
mysql_query(”set
names
'gbk'“)
//设置查询的数据库数据编码,根据数据库的编码设置
$sql="select
*
from
user"
//比如说你要查询一个用户表user,假设它有三个字段,用户id,用户名username,密码password,
$rs=mysql_query($sql)
?
用户id
用户名
密码
?php
while($row=mysql_fetch_assoc($rs)){
?
?php
echo
$row['id']?
?php
echo
$row['username']?
?php
echo
$row['password']?
?php
}
?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)