在struts中分页的一种实现
我的项目中的分页功能
1, 思路
使用一个页面控制类,它记录页面信息,如上页,下页,当前页等。在查询的action中,将这个控制类和查询条件一起传递给数据库访问bean,然后将这两个参数保存在用户session中。在分页控制action中,利用接收到的分页参数调用数据库访问的bean.
2,实现
(1)分页控制类
/* @author nick
* created on 2004-3-18
* file name:pagecontroller.java
*
*
*/
package com.tower.util;
/**
* @author nick
* 2004-3-18
* 用来进行翻页控制
*
*/
public class pagecontroller {
int totalrowsamount; //总行数
boolean rowsamountset; //是否设置过totalrowsamount
int pagesize=2; //每页行数
int currentpage=1; //当前页码
int nextpage;
int previouspage;
int totalpages; //总页数
boolean hasnext; //是否有下一页
boolean hasprevious; //是否有前一页
string description;
int pagestartrow;
int pageendrow;
public pagecontroller(int totalrows){
settotalrowsamount(totalrows);
}
public pagecontroller(){}
/**
* @param i
* 设定总行数
*/
public void settotalrowsamount(int i) {
if(!this.rowsamountset){
totalrowsamount = i;
totalpages=totalrowsamount/pagesize+1;
setcurrentpage(1);
this.rowsamountset=true;
}
}
/**
* @param i
*
* 当前页
*
*/
public void setcurrentpage(int i) {
currentpage = i;
nextpage=currentpage+1;
previouspage=currentpage-1;
//计算当前页开始行和结束行
if(currentpage*pagesize<totalrowsamount){
pageendrow=currentpage*pagesize;
pagestartrow=pageendrow-pagesize+1;
}else{
pageendrow=totalrowsamount;
pagestartrow=pagesize*(totalpages-1)+1;
}
//是否存在前页和后页
if (nextpage>totalpages){
hasnext=false;
}else{
hasnext=true;
}
if(previouspage==0){
hasprevious=false;
}else{
hasprevious=true;
};
system.out.println(this.description());
}
/**
* @return
*/
public int getcurrentpage() {
return currentpage;
}
/**
* @return
*/
public boolean ishasnext() {
return hasnext;
}
/**
* @return
*/
public boolean ishasprevious() {
return hasprevious;
}
/**
* @return
*/
public int getnextpage() {
return nextpage;
}
/**
* @return
*/
public int getpagesize() {
return pagesize;
}
/**
* @return
*/
public int getpreviouspage() {
return previouspage;
}
/**
* @return
*/
public int gettotalpages() {
return totalpages;
}
/**
* @return
*/
public int gettotalrowsamount() {
return totalrowsamount;
}
/**
* @param b
*/
public void sethasnext(boolean b) {
hasnext = b;
}
/**
* @param b
*/
public void sethasprevious(boolean b) {
hasprevious = b;
}
/**
* @param i
*/
public void setnextpage(int i) {
nextpage = i;
}
/**
* @param i
*/
public void setpagesize(int i) {
pagesize = i;
}
/**
* @param i
*/
public void setpreviouspage(int i) {
previouspage = i;
}
/**
* @param i
*/
public void settotalpages(int i) {
totalpages = i;
}
/**
* @return
*/
public int getpageendrow() {
return pageendrow;
}
/**
* @return
*/
public int getpagestartrow() {
return pagestartrow;
}
public string getdescription(){
string description="total:"+this.gettotalrowsamount()+
" items "+this.gettotalpages() +" pages";
// this.currentpage+" previous "+this.hasprevious +
// " next:"+this.hasnext+
// " start row:"+this.pagestartrow+
// " end row:"+this.pageendrow;
return description;
}
public string description(){
string description="total:"+this.gettotalrowsamount()+
" items "+this.gettotalpages() +" pages,current page:"+
this.currentpage+" previous "+this.hasprevious +
" next:"+this.hasnext+
" start row:"+this.pagestartrow+
" end row:"+this.pageendrow;
return description;
}
public static void main(string args[]){
pagecontroller pc=new pagecontroller(3);
system.out.println(pc.getdescription());
// pc.setcurrentpage(2);
// system.out.println(pc.description());
// pc.setcurrentpage(3);
// system.out.println(pc.description());
}
}
(2)查询action的代码片断
public actionforward execute(
actionmapping mapping,
actionform form,
httpservletrequest request,
httpservletresponse response)
throws exception {
base queryform= (base) form;
if(!queryform.getname().equals("")){
pagecontroller pc=new pagecontroller();
employeebase service=new employeebase();
arraylist result=(arraylist)service.search(queryform,pc);
httpsession session=request.getsession();
session.setattribute("queryform",queryform);
session.setattribute("pagecontroller",service.getpagecontroller());
request.setattribute("queryresult",result);
request.setattribute("pagecontroller",service.getpagecontroller());
return mapping.findforward("haveresult");
}else{
return mapping.findforward("noresult");
}
}
(3),翻页action的代码片断
public actionforward execute(
actionmapping mapping,
actionform form,
httpservletrequest request,
httpservletresponse response)
throws exception {
//读取翻页参数
turnpageform turnpageform=(turnpageform)form;
//从pagecontroller中取出查询信息,并使用bean提供的调用接口处理结果
httpsession session=request.getsession();
pagecontroller pc=(pagecontroller)session.getattribute("pagecontroller");
base queryform=(base)session.getattribute("queryform");
pc.setcurrentpage(turnpageform.getviewpage());
employeebase service=new employeebase();
arraylist result=(arraylist)service.search(queryform,pc);
//根据参数将数据写入 request
request.removeattribute("queryresult");
request.removeattribute("pagecontroller");
request.setattribute("queryresult",result);
request.setattribute("pagecontroller",pc);
//forward 到显示页面
return mapping.findforward("haveresult");
}
(4)数据库访问bean中的片断
public collection search(base base, pagecontroller pc)
throws sqlexception {
arraylist emps = new arraylist();
resultset rs = getsearchresult(base);
rs.absolute(-1);
pc.settotalrowsamount(rs.getrow());
setpagecontroller(pc);
if (rs.getrow() > 0) {
rs.absolute(pc.getpagestartrow());
do {
system.out.println("in loop" + rs.getrow());
base b = new base();
b.setname(rs.getstring("name"));
b.setidcard(rs.getstring("idcard"));
system.out.println("from db:" + rs.getstring("idcard"));
emps.add(b);
if (!rs.next()) {
break;
}
} while (rs.getrow() < (pc.getpageendrow() + 1));
}
return emps;
}
(5)在jsp中,翻页部分的代码片断
<bean:write name="pagecontroller" property="description"/>
<logic:equal name="pagecontroller" property="hasprevious" value="true">
<a href="turnpage.do?viewpage=<bean:write name="pagecontroller" property="previouspage"/>" class="a02">
previous
</a>
</logic:equal>
<logic:equal name="pagecontroller" property="hasnext" value="true">
<a href="turnpage.do?viewpage=<bean:write name="pagecontroller" property="nextpage"/>" class="a02">
next
</a>
</logic:equal>
这样一来,翻页的功能可以以你喜欢的方式表现给client
