第N頁/共M頁 首頁 上一頁 1 2 3 4 5 6 7 8 9 下一頁 尾頁 [ ] gojava
分頁的優勢:只查詢一頁,不用查詢全部頁!數據庫
頁面的數據都是由Servlet傳遞過來的!dom
Servlet:this
1.*當前頁:pageCode,pc;編碼
>pc:若是頁面沒有傳遞當前頁碼,那麼Servlet默認是第一頁,或者按頁面傳遞的爲準!url
2.*總頁數:totalPages,tpspa
>tp:總記錄數/每頁記錄數code
3.*總記錄數:totalRecored,trorm
>tr:dao來獲取,select count(*) from 表;對象
4.*每頁記錄數:業務數據或叫系統數據!(由咱們本身來定義)
5.*當前頁數據:beanList
6.*url
這些分頁數據總要在各層之間來回傳遞!
咱們把這些分頁數據封裝到一個Javabean中,它就叫分頁Bean,例如:PageBean
1 package cn.itcast.cstm.domain; 2 3 import java.util.List; 4 5 public class PageBean<T> { 6 private int pc;// 當前頁碼page code 7 // private int tp;// 總頁數total page---不須要了,只需get獲得 8 private int tr;// 總記錄數total record 9 private int ps;// 每頁記錄數page size 10 private List<T> beanList;// 當前頁的記錄 11 12 private String url;//它就是url後的條件! 13 14 public String getUrl() { 15 return url; 16 } 17 18 public void setUrl(String url) { 19 this.url = url; 20 } 21 22 public int getPc() { 23 return pc; 24 } 25 26 public void setPc(int pc) { 27 this.pc = pc; 28 } 29 30 /** 31 * 計算總頁數 32 * @return 33 */ 34 public int getTp() { 35 // 經過總記錄數和每頁記錄數來計算總頁數 36 int tp = tr / ps; 37 return tr%ps==0 ? tp : tp+1; 38 } 39 40 // public void setTp(int tp) { 41 // this.tp = tp; 42 // } 43 44 public int getTr() { 45 return tr; 46 } 47 48 public void setTr(int tr) { 49 this.tr = tr; 50 } 51 52 public int getPs() { 53 return ps; 54 } 55 56 public void setPs(int ps) { 57 this.ps = ps; 58 } 59 60 public List<T> getBeanList() { 61 return beanList; 62 } 63 64 public void setBeanList(List<T> beanList) { 65 this.beanList = beanList; 66 } 67 }
*頁面:給出分頁相關的連接們!
>頁面須要給Servlet傳遞什麼:有可能傳遞pc(當前頁碼)
*Servlet:建立PageBaen對象,給PageBean全部的屬性賦值,而後傳遞給頁面。
>Servlet須要給Dao傳遞
*Service:調用dao層方法。(中轉)
*Dao:
>tr(總記錄數):select count(*) 表名;
>beanList:select *from 表名 limit x, y;(從數據庫中查詢從第x行開始,查y條記錄---是MySQL的方言)
1 2 3 4 5 6 7 8 9 10
# 最多顯示多少個頁碼!(暫定爲10);
# 當前頁,在頁碼中列表中的位置,定爲6;
只須要當前頁碼來定出來頁碼錶!
定下來頁碼列表只須要兩樣數據:
begin
end
10 11 12 13 14 (15) 16 17 18 19
須要使用pc來推算出begin和end
begin=pc-5
end=pc+4
計算公式:
# 若是總頁數<=10(列表長度),那麼begin=1,end=總頁數
# 使用公式計算:begin=pc-5,end=pc+4;
# 頭溢出:當begin<1時,讓begin=1;
# 尾溢出:當end>${tp}最大頁數,讓end=${tp}
當使用多條件查詢後,而後再點擊第二頁時,這個第二頁超連接沒有條件了,因此會丟失條件,因此咱們須要在頁面上的全部連接都要保留條件!
咱們要把條件以一個字符串的形式保存到PageBean的url中!這個任務交給Servlet!
也就是獲取請求的路徑及參數(參數中不包括當前頁pc)
/** * 截取url * /項目名/Servlet路徑?參數字符串 * @param request * @return */ private String getUrl(HttpServletRequest request){ String contextPath=request.getContextPath();//獲取項目名 String servletPath = request.getServletPath();//獲取Servlet路徑 String queryString = request.getQueryString();//獲取?以後的參數 //判斷參數部分是否包含pc這個參數,若是包含,須要截取下去,不要這一部分。 if(queryString.contains("&pc=")){ //返回指定子字符串在此字符串中最右邊出現處的索引 int index=queryString.lastIndexOf("&pc="); queryString=queryString.substring(0, index); } return contextPath+servletPath+"?"+queryString; }
把此次請求獲得的路徑保存到PageBean對象中,而後能夠在頁面獲取,從而不會丟失參數,完成查詢的分頁。
注意:在搜索查詢的時候,也就是在Dao層的SQL語句上增長where子句,返回一個PageBean(其中BeanList是查詢獲得的對象集合),而後再分頁實現。
請求的時候的form表單的請求方式爲GET,這樣所得的URL路徑中包含查詢的參數條件(POST方式不帶查詢的參數條件),而後再處理編碼問題獲得參數條件。完成搜索查詢。