package kr.spring.util;
public class PagingUtil {
private int startCount; // 한 페이지에서 보여줄 게시글의 시작 번호
private int endCount; // 한 페이지에서 보여줄 게시글의 끝 번호
private StringBuffer pagingHtml;// 페이지 표시 문자열
/**
* currentPage : 현재페이지
* totalCount : 전체 게시물 수
* rowCount : 한 페이지의 게시물의 수
* pageCount : 한 화면에 보여줄 페이지 수
* pageUrl : 호출 페이지 url
* addKey : 부가적인 key 없을 때는 null 처리 (&num=23형식으로 전달할 것)
* */
public PagingUtil(int currentPage, int totalCount, int rowCount,
int pageCount, String pageUrl) {
this(null,null,currentPage,totalCount,rowCount,pageCount,pageUrl,null);
}
public PagingUtil(int currentPage, int totalCount, int rowCount,
int pageCount, String pageUrl, String addKey) {
this(null,null,currentPage,totalCount,rowCount,pageCount,pageUrl,addKey);
}
public PagingUtil(String keyfield, String keyword, int currentPage, int totalCount, int rowCount,
int pageCount,String pageUrl) {
this(keyfield,keyword,currentPage,totalCount,rowCount,pageCount,pageUrl,null);
}
public PagingUtil(String keyfield, String keyword, int currentPage, int totalCount, int rowCount,
int pageCount,String pageUrl,String addKey) {
if(addKey == null) addKey = ""; //부가키가 null 일때 ""처리
// 전체 페이지 수
int totalPage = (int) Math.ceil((double) totalCount / rowCount);
if (totalPage == 0) {
totalPage = 1;
}
// 현재 페이지가 전체 페이지 수보다 크면 전체 페이지 수로 설정
if (currentPage > totalPage) {
currentPage = totalPage;
}
// 현재 페이지의 처음과 마지막 글의 번호 가져오기.
startCount = (currentPage - 1) * rowCount + 1;
endCount = currentPage * rowCount;
// 시작 페이지와 마지막 페이지 값 구하기.
int startPage = (int) ((currentPage - 1) / pageCount) * pageCount + 1;
int endPage = startPage + pageCount - 1;
// 마지막 페이지가 전체 페이지 수보다 크면 전체 페이지 수로 설정
if (endPage > totalPage) {
endPage = totalPage;
}
// 이전 block 페이지
pagingHtml = new StringBuffer();
if (currentPage > pageCount) {
if(keyword==null){//검색 미사용시
pagingHtml.append("");
}else{
pagingHtml.append("");
}
pagingHtml.append("이전");
pagingHtml.append("");
}
pagingHtml.append(" | ");
//페이지 번호.현재 페이지는 빨간색으로 강조하고 링크를 제거.
for (int i = startPage; i <= endPage; i++) {
if (i > totalPage) {
break;
}
if (i == currentPage) {
pagingHtml.append(" ");
pagingHtml.append(i);
pagingHtml.append("");
} else {
if(keyword==null){//검색 미사용시
pagingHtml.append(" ");
pagingHtml.append(i);
pagingHtml.append("");
}
pagingHtml.append(" ");
}
pagingHtml.append(" | ");
// 다음 block 페이지
if (totalPage - startPage >= pageCount) {
if(keyword==null){//검색 미사용시
pagingHtml.append("");
}else{
pagingHtml.append("");
}
pagingHtml.append("다음");
pagingHtml.append("");
}
}
public StringBuffer getPagingHtml() {
return pagingHtml;
}
public int getStartCount() {
return startCount;
}
public int getEndCount() {
return endCount;
}
}