分頁對象接口:
public interface Paginable {
/**
* 總記錄數
*
* @return
*/
public int getTotalCount();
/**
* 總頁數
*
* @return
*/
public int getTotalPage();
/**
* 每頁記錄數
*
* @return
*/
public int getPageSize();
/**
* 目前頁号
*
* @return
*/
public int getPageNo();
/**
* 是否第一頁
*
* @return
*/
public boolean isFirstPage();
/**
* 是否最後一頁
*
* @return
*/
public boolean isLastPage();
/**
* 傳回下頁的頁号
*/
public int getNextPage();
/**
* 傳回上頁的頁号
*/
public int getPrePage();
}
簡單的分頁對象:
public class SimplePage implements Serializable,Paginable{
private static final long serialVersionUID = 1L;
public static final int DEF_COUNT = 20;
/**
* 檢查頁碼 checkPageNo
*
* @param pageNo
* @return if pageNo==null or pageNo<1 then return 1 else return pageNo
*/
public static int cpn(Integer pageNo) {
return (pageNo == null || pageNo < 1) ? 1 : pageNo;
}
public SimplePage() {
}
/**
* 構造器
*
* @param pageNo
* 頁碼
* @param pageSize
* 每頁幾條資料
* @param totalCount
* 總共幾條資料
*/
public SimplePage(int pageNo, int pageSize, int totalCount) {
setTotalCount(totalCount);
setPageSize(pageSize);
setPageNo(pageNo);
adjustPageNo();
}
/**
* 調整頁碼,使不超過最大頁數
*/
public void adjustPageNo() {
if (pageNo == 1) {
return;
}
int tp = getTotalPage();
if (pageNo > tp) {
pageNo = tp;
}
}
/**
* 獲得頁碼
*/
public int getPageNo() {
return pageNo;
}
/**
* 每頁幾條資料
*/
public int getPageSize() {
return pageSize;
}
/**
* 總共幾條資料
*/
public int getTotalCount() {
return totalCount;
}
/**
* 總共幾頁
*/
public int getTotalPage() {
int totalPage = totalCount / pageSize;
if (totalPage == 0 || totalCount % pageSize != 0) {
totalPage++;
}
return totalPage;
}
/**
* 是否第一頁
*/
public boolean isFirstPage() {
return pageNo <= 1;
}
/**
* 是否最後一頁
*/
public boolean isLastPage() {
return pageNo >= getTotalPage();
}
/**
* 下一頁頁碼
*/
public int getNextPage() {
if (isLastPage()) {
return pageNo;
} else {
return pageNo + 1;
}
}
/**
* 上一頁頁碼
*/
public int getPrePage() {
if (isFirstPage()) {
return pageNo;
} else {
return pageNo - 1;
}
}
protected int totalCount = 0;
protected int pageSize = 20;
protected int pageNo = 1;
/**
* if totalCount<0 then totalCount=0
*
* @param totalCount
*/
public void setTotalCount(int totalCount) {
if (totalCount < 0) {
this.totalCount = 0;
} else {
this.totalCount = totalCount;
}
}
/**
* if pageSize< 1 then pageSize=DEF_COUNT
*
* @param pageSize
*/
public void setPageSize(int pageSize) {
if (pageSize < 1) {
this.pageSize = DEF_COUNT;
} else {
this.pageSize = pageSize;
}
}
/**
* if pageNo < 1 then pageNo=1
*
* @param pageNo
*/
public void setPageNo(int pageNo) {
if (pageNo < 1) {
this.pageNo = 1;
} else {
this.pageNo = pageNo;
}
}
}
分頁對象:
public class Pagination extends SimplePage{
private static final long serialVersionUID = 1L;
public Pagination() {
}
/**
* 構造器
*
* @param pageNo
* 頁碼
* @param pageSize
* 每頁幾條資料
* @param totalCount
* 總共幾條資料
*/
public Pagination(int pageNo, int pageSize, int totalCount) {
super(pageNo, pageSize, totalCount);
}
/**
* 構造器
*
* @param pageNo
* 頁碼
* @param pageSize
* 每頁幾條資料
* @param totalCount
* 總共幾條資料
* @param list
* 分頁内容
*/
public Pagination(int pageNo, int pageSize, int totalCount, List<?> list) {
super(pageNo, pageSize, totalCount);
this.list = list;
}
/**
* 第一條資料位置
*
* @return
*/
public int getFirstResult() {
return (pageNo - 1) * pageSize;
}
/**
* 目前頁的資料
*/
private List<?> list;
/**
* 目前頁的分頁樣式
*/
private List<String> pageView;
/**
* 獲得分頁内容
*
* @return
*/
public List<?> getList() {
return list;
}
/**
* 設定分頁内容
*
* @param list
*/
public void setList(@SuppressWarnings("rawtypes") List list) {
this.list = list;
}
/**
* 獲得分頁樣式
*
* @return
*/
public List<String> getPageView() {
return pageView;
}
/**
* 設定分頁樣式
*
* @param list
*/
public void setPageView(List<String> pageView) {
this.pageView = pageView;
}
/**
* 分頁顯示樣示部分
*/
public void pageView(String url,String params){
pageView = new ArrayList<String>();
if(this.pageNo != 1){
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo=1'\"><font size=2>首頁</font></a>");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.pageNo-1)+"'\"><font size=2>上一頁</font></a>");
}else{
pageView.add("<font size=2>首頁</font>");
pageView.add("<font size=2>上一頁</font>");
}
if(this.getTotalPage() <= 10){
for (int i = 0; i < this.getTotalPage(); i++) {
if((i+1)==this.pageNo){
pageView.add("<strong>"+this.pageNo+"</strong>");
i = i+1;
if(this.pageNo==this.getTotalPage())break;
}
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(i+1)+"'\">"+(i+1)+"</a>");
}
}else if(this.getTotalPage() <= 20){
//沒有把...加上
int l = 0;
int r = 0;
if(this.pageNo<5){
l=this.pageNo-1;
r=10-l-1;
}else if(this.getTotalPage()-this.pageNo<5){
r=this.getTotalPage()-this.pageNo;
l=10-1-r;
}else{
l=4;
r=5;
}
int tmp = this.pageNo-l;
for (int i = tmp; i < tmp+10; i++) {
if(i==this.pageNo){
pageView.add("<strong>"+this.pageNo+"</strong>");
i = i+1;
if(this.pageNo==this.getTotalPage()) break;
}
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(i)+"'\">"+(i)+"</a>");
}
}else if(this.pageNo<7){
for (int i = 0; i < 8; i++) {
if(i+1==this.pageNo){
pageView.add("<strong>"+this.pageNo+"</strong>");
i = i+1;
}
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(i+1)+"'\">"+(i+1)+"</a>");
}
pageView.add("...");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.getTotalPage()-1)+"'\">"+(this.getTotalPage()-1)+"</a>");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.getTotalPage())+"'\">"+(this.getTotalPage())+"</a>");
}else if(this.pageNo>this.getTotalPage()-6){
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(1)+"'\">"+(1)+"</a>");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(2)+"'\">"+(2)+"</a>");
pageView.add("...");
for (int i = this.getTotalPage()-8; i <this.getTotalPage() ; i++) {
if(i+1==this.pageNo){
pageView.add("<strong>"+this.pageNo+"</strong>");
i = i+1;
if(this.pageNo==this.getTotalPage()) break;
}
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(i+1)+"'\">"+(i+1)+"</a>");
}
}else{
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(1)+"'\">"+(1)+"</a>");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(2)+"'\">"+(2)+"</a>");
pageView.add("...");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.pageNo-2)+"'\">"+(this.pageNo-2)+"</a>");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.pageNo-1)+"'\">"+(this.pageNo-1)+"</a>");
pageView.add("<strong>"+this.pageNo+"</strong>");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.pageNo+1)+"'\">"+(this.pageNo+1)+"</a>");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.pageNo+2)+"'\">"+(this.pageNo+2)+"</a>");
pageView.add("...");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.getTotalPage()-1)+"'\">"+(this.getTotalPage()-1)+"</a>");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.getTotalPage())+"'\">"+(this.getTotalPage())+"</a>");
}
if(this.pageNo != this.getTotalPage()){
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+(this.pageNo+1)+"'\"><font size=2>下一頁</font></a>");
pageView.add("<a href=\"javascript:void(0);\" οnclick=\"javascript:window.location.href='" + url + "?" + params + "&pageNo="+this.getTotalPage()+"'\"><font size=2>尾頁</font></a>");
} else{
pageView.add("<font size=2>下一頁</font>");
pageView.add("<font size=2>尾頁</font>");
}
pageView.add("共<var>" + getTotalPage() + "</var>頁 到第<input type='text' id='PAGENO' size='3' />頁 <input type='button' id='skip' class='hand btn60x20' value='确定' οnclick=\"javascript:window.location.href = '" + url + "?" + params + "&pageNo=' + $('#PAGENO').val() \"/>");
}
}