1.5.3 分页类
CreatePage类用来封装分页信息,这些信息都保存在CreatePage类的相应属性中。CreatePage类的属性如下:
例程14 代码位置:光盘\TM\01\src\com\yxq\model\CreatePage.java
private int CurrentP; //当前页码
private int AllP; //总页数
private int AllR; //总记录数
private int PerR; //每页显示的记录数
private String PageLink; //分页导航栏信息
private String PageInfo; //分页状态显示信息
在类的构造方法中为这些属性赋初始值。CreatePage类的构造方法如下:
例程15 代码位置:光盘\TM\01\src\com\yxq\model\CreatePage.java
public CreatePage(){
CurrentP=1; //设置当前页码为1
AllP=1; //设置总页数为1
AllR=0; //设置总记录数为0
PerR=3; //设置每页显示3条记录
PageLink="";
PageInfo="";
}
分页信息中的总记录数,需要通过查询数据库来获得,其实现可查看1.5.2节对OpDB类中的OpCreatePage()方法的介绍。CreatePage类中用来设置总记录数的方法如下:
例程16 代码位置:光盘\TM\01\src\com\yxq\model\CreatePage.java
/* 设置总记录数 */
public void setAllR(int AllR){
this.AllR=AllR;
}
总页数需要获得总记录数后与每页显示的记录数计算得到,其算法为:“总页数=(总记录数%每页显示记录==0)?(总记录数/每页显示记录):(总记录数/每页显示记录+1)”,所以要先设置总记录数,然后再来设置总页数。CreatePage类中用来设置总页数的方法如下:
例程17 代码位置:光盘\TM\01\src\com\yxq\model\CreatePage.java
/* 计算总页数 */
public void setAllP(){
AllP=(AllR%PerR==0)?(AllR/PerR):(AllR/PerR+1);
}
在设置当前页码时,要判断由参数传递的当前页码是否有效,例如传递的值是否为数字形式、是否小于1、是否大于总页数等,对这些情况要进行相应的处理。CreatePage类中用来设置当前页码的方法如下:
例程18 代码位置:光盘\TM\01\src\com\yxq\model\CreatePage.java
/* 设置当前页码 */
public void setCurrentP(String currentP) {
if(currentP==null||currentP.equals(""))
currentP="1";
try{
CurrentP=Integer.parseInt(currentP);
}catch(NumberFormatException e){ //若参数传递的当前页码不是数字形式
CurrentP=1; //将当前页码设为1
e.printStackTrace();
}
if(CurrentP<1) //若当前页码小于1
CurrentP=1; //将当前页码赋值为1
if(CurrentP>AllP) //若当前页码大于总页数
CurrentP=AllP; //将当前页码赋值为总页数,即最后一页
}
在调用以上方法后,就可调用设置分页状态显示信息的方法来设置分页状态显示信息。该方法的代码如下:
例程19 代码位置:光盘\TM\01\src\com\yxq\model\CreatePage.java
/* 设置分页状态显示信息 */
public void setPageInfo(){
if(AllP>1){
PageInfo="<table border='0' cellpadding='3'><tr><td>";
PageInfo+="每页显示:"+PerR+"/"+AllR+" 条记录!";
PageInfo+="当前页:"+CurrentP+"/"+AllP+" 页!";
PageInfo+="</td></tr></table>";
}
}
另外,还需要设置分页导航栏信息。在设置该信息时,需要判断总页数,若总页数大于1,则显示分页导航链接,否则不显示。CreatePage类中用来设置分页导航栏信息的方法如下:
例程20 代码位置:光盘\TM\01\src\com\yxq\model\CreatePage.java
/* 设置分页导航栏信息 */
public void setPageLink(String gowhich){
if(gowhich==null)
gowhich="";
if(gowhich.indexOf("?")>=0)
gowhich+="&";
else
gowhich+="?";
if(AllP>1){ //如果总页数大于1页,生成分页导航链接
PageLink="<table border='0' cellpadding='3'><tr><td>";
if(CurrentP>1){ //若当前页码大于1,则显示“首页”和“上一页”超链接
PageLink+="<a href='"+gowhich+"showpage=1'>首页</a> ";
PageLink+="<a href='"+gowhich+"showpage="+(CurrentP-1)+"'>上一页</a> ";
}
if(CurrentP<AllP){ //若当前页码小于总页数,则显示“下一页”和“尾页”超链接
PageLink+="<a href='"+gowhich+"showpage="+(CurrentP+1)+"'>下一页</a> ";
PageLink+="<a href='"+gowhich+"showpage="+AllP+"'>尾页</a>";
}
PageLink+="</td></tr></table>";
}
}