1.5.3 分頁(yè)類
CreatePage類用來(lái)封裝分頁(yè)信息,這些信息都保存在CreatePage類的相應(yīng)屬性中。CreatePage類的屬性如下:
例程14 代碼位置:光盤\TM\01\src\com\yxq\model\CreatePage.java
private int CurrentP; //當(dāng)前頁(yè)碼
private int AllP; //總頁(yè)數(shù)
private int AllR; //總記錄數(shù)
private int PerR; //每頁(yè)顯示的記錄數(shù)
private String PageLink; //分頁(yè)導(dǎo)航欄信息
private String PageInfo; //分頁(yè)狀態(tài)顯示信息
在類的構(gòu)造方法中為這些屬性賦初始值。CreatePage類的構(gòu)造方法如下:
例程15 代碼位置:光盤\TM\01\src\com\yxq\model\CreatePage.java
public CreatePage(){
CurrentP=1; //設(shè)置當(dāng)前頁(yè)碼為1
AllP=1; //設(shè)置總頁(yè)數(shù)為1
AllR=0; //設(shè)置總記錄數(shù)為0
PerR=3; //設(shè)置每頁(yè)顯示3條記錄
PageLink="";
PageInfo="";
}
分頁(yè)信息中的總記錄數(shù),需要通過查詢數(shù)據(jù)庫(kù)來(lái)獲得,其實(shí)現(xiàn)可查看1.5.2節(jié)對(duì)OpDB類中的OpCreatePage()方法的介紹。CreatePage類中用來(lái)設(shè)置總記錄數(shù)的方法如下:
例程16 代碼位置:光盤\TM\01\src\com\yxq\model\CreatePage.java
/* 設(shè)置總記錄數(shù) */
public void setAllR(int AllR){
this.AllR=AllR;
}
總頁(yè)數(shù)需要獲得總記錄數(shù)后與每頁(yè)顯示的記錄數(shù)計(jì)算得到,其算法為:“總頁(yè)數(shù)=(總記錄數(shù)%每頁(yè)顯示記錄==0)?(總記錄數(shù)/每頁(yè)顯示記錄):(總記錄數(shù)/每頁(yè)顯示記錄+1)”,所以要先設(shè)置總記錄數(shù),然后再來(lái)設(shè)置總頁(yè)數(shù)。CreatePage類中用來(lái)設(shè)置總頁(yè)數(shù)的方法如下:
例程17 代碼位置:光盤\TM\01\src\com\yxq\model\CreatePage.java
/* 計(jì)算總頁(yè)數(shù) */
public void setAllP(){
AllP=(AllR%PerR==0)?(AllR/PerR):(AllR/PerR+1);
}
在設(shè)置當(dāng)前頁(yè)碼時(shí),要判斷由參數(shù)傳遞的當(dāng)前頁(yè)碼是否有效,例如傳遞的值是否為數(shù)字形式、是否小于1、是否大于總頁(yè)數(shù)等,對(duì)這些情況要進(jìn)行相應(yīng)的處理。CreatePage類中用來(lái)設(shè)置當(dāng)前頁(yè)碼的方法如下:
例程18 代碼位置:光盤\TM\01\src\com\yxq\model\CreatePage.java
/* 設(shè)置當(dāng)前頁(yè)碼 */
public void setCurrentP(String currentP) {
if(currentP==null||currentP.equals(""))
currentP="1";
try{
CurrentP=Integer.parseInt(currentP);
}catch(NumberFormatException e){ //若參數(shù)傳遞的當(dāng)前頁(yè)碼不是數(shù)字形式
CurrentP=1; //將當(dāng)前頁(yè)碼設(shè)為1
e.printStackTrace();
}
if(CurrentP<1) //若當(dāng)前頁(yè)碼小于1
CurrentP=1; //將當(dāng)前頁(yè)碼賦值為1
if(CurrentP>AllP) //若當(dāng)前頁(yè)碼大于總頁(yè)數(shù)
CurrentP=AllP; //將當(dāng)前頁(yè)碼賦值為總頁(yè)數(shù),即最后一頁(yè)
}
在調(diào)用以上方法后,就可調(diào)用設(shè)置分頁(yè)狀態(tài)顯示信息的方法來(lái)設(shè)置分頁(yè)狀態(tài)顯示信息。該方法的代碼如下:
例程19 代碼位置:光盤\TM\01\src\com\yxq\model\CreatePage.java
/* 設(shè)置分頁(yè)狀態(tài)顯示信息 */
public void setPageInfo(){
if(AllP>1){
PageInfo="<table border='0' cellpadding='3'><tr><td>";
PageInfo+="每頁(yè)顯示:"+PerR+"/"+AllR+" 條記錄!";
PageInfo+="當(dāng)前頁(yè):"+CurrentP+"/"+AllP+" 頁(yè)!";
PageInfo+="</td></tr></table>";
}
}
另外,還需要設(shè)置分頁(yè)導(dǎo)航欄信息。在設(shè)置該信息時(shí),需要判斷總頁(yè)數(shù),若總頁(yè)數(shù)大于1,則顯示分頁(yè)導(dǎo)航鏈接,否則不顯示。CreatePage類中用來(lái)設(shè)置分頁(yè)導(dǎo)航欄信息的方法如下:
例程20 代碼位置:光盤\TM\01\src\com\yxq\model\CreatePage.java
/* 設(shè)置分頁(yè)導(dǎo)航欄信息 */
public void setPageLink(String gowhich){
if(gowhich==null)
gowhich="";
if(gowhich.indexOf("?")>=0)
gowhich+="&";
else
gowhich+="?";
if(AllP>1){ //如果總頁(yè)數(shù)大于1頁(yè),生成分頁(yè)導(dǎo)航鏈接
PageLink="<table border='0' cellpadding='3'><tr><td>";
if(CurrentP>1){ //若當(dāng)前頁(yè)碼大于1,則顯示“首頁(yè)”和“上一頁(yè)”超鏈接
PageLink+="<a href='"+gowhich+"showpage=1'>首頁(yè)</a> ";
PageLink+="<a href='"+gowhich+"showpage="+(CurrentP-1)+"'>上一頁(yè)</a> ";
}
if(CurrentP<AllP){ //若當(dāng)前頁(yè)碼小于總頁(yè)數(shù),則顯示“下一頁(yè)”和“尾頁(yè)”超鏈接
PageLink+="<a href='"+gowhich+"showpage="+(CurrentP+1)+"'>下一頁(yè)</a> ";
PageLink+="<a href='"+gowhich+"showpage="+AllP+"'>尾頁(yè)</a>";
}
PageLink+="</td></tr></table>";
}
}