PageNavigation.java
/**
* <br>프로그램명 : PageNavigation.java
* <br>설명 : 페이지 관련 처리
* <br>Version : 1.0
* <br>작성일자 : 2002/01/11 작성자 : 이희형
* <br>수정일자 : 수정자 :
* <br>수정내용 :
*/
package kr.re.kict.etc;
import java.util.Vector;
public class PageNavigation
{
// 현재 페이지 번호
private int pageNo;
// 전체 게시물 숫자
private int totalCount;
// 한 화면에 보여주는 데이터 수
private int displayCnt;
// 한 화면에 보여주는 페이지 수
private int displayPageRange;
// 이전 페이지 번호
private int previousPage;
// 다음 페이지 번호
private int nextPage;
// 마지막 페이지 번호
private int lastPage;
// pageNavigation('페이지번호','게시판 총 갯수','한페이지에 보여지는 리스트수','한화면에 보여지는 페이지 리스트수')
// PageNavigation pageNavigation = new PageNavigation(Integer.parseInt(pageNo), totalCount, listCount, pageCount);
/**
* 다음 파라미터로 PageNavigation 객체를 생성한다.
* 사용방법은
* 1. 한 화면당 게시물 숫자, 한 화면에 보여줄 페이지 인덱수 수, 보여줄 페이지번호를 파라미터로 받는다.
* 2. 조건에 맞는 총 게시물 숫자를 구한다.
* 3. 이 생성자 PageNavigation(int currentPageNo, int totalCnt, int displayCntNo, int displayPageRangeNo)를 이용하여 객체 생성
* 4. pageNavigation.getPreviousPageNo(), pageNavigation.getNextPageNo() 를 이용하여 이전 다음 페이지 번호를 얻는다. (JSP에서 사용)
* 5. pageNavigation.getPageList() 를 이용하여 페이진 인덱스 리스트를 얻는다. (JSP에서 사용)
* 6. 쿼리에 사용할 rownum 상,하한을 pageNavigation.getMinCount(), pageNavigation.getMaxCount() 메쏘드로 얻어 사용한다.
* <p>
* @param int currentPageNo 현재 페이지 번호
* @param int totalCnt 게시물 총 갯수
* @param int displayCntNo 한 페이지에 보여주는 게시물 수
* @param int displayPageRangeNo 한 화면에 보여지는 페이지인덱스 수
*/
public PageNavigation(int currentPageNo, int totalCnt, int displayCntNo, int displayPageRangeNo)
{
setPageNo(currentPageNo);
setTotalCnt(totalCnt);
setDisplay(displayCntNo);
setPageRange(displayPageRangeNo);
assignPage();
}
/**
* 현재 페이지 번호를 반환한다.
* <p>
* @return int
*/
public int getPageNo()
{
return pageNo;
}
/**
* 최종 페이지 번호를 반환한다.
* <p>
* @return int
*/
public int getLastPageNo()
{
return lastPage;
}
/**
* 다음 페이지 번호를 반환한다.
* <p>
* @return int
*/
public int getNextPageNo()
{
return nextPage;
}
/**
* 다음 페이지 번호를 반환한다.
* <p>
* @return int
*/
public int getPreviousPageNo()
{
return previousPage;
}
/**
* 전체 개시물 수를 반환한다.
* <p>
* @return int
*/
public int getTotalCnt()
{
return totalCount;
}
/**
* 부분 범위 처리 쿼리의 max rownum 반환
* <p>
* @return int
*/
public String getMaxCount()
{
return String.valueOf(pageNo * displayCnt + 1);
}
/**
* 부분 범위 처리 쿼리의 min rownum 반환
* <p>
* @return int
*/
public String getMinCount()
{
return String.valueOf((pageNo-1) * displayCnt);
}
/**
* 페이진 인덱스 리스트를 얻는다.
* <p>
* @return int
*/
public Vector getPageList()
{
Vector<String> vec = new Vector<String>();
for(int i= previousPage+1; i < lastPage ;i++) {
vec.addElement(String.valueOf(i));
}
return vec;
}
//현재 페이지 입력
public void setPageNo(int var)
{
pageNo = var;
}
//현재 페이지 입력
public void setTotalCnt(int var)
{
totalCount = var;
}
// 한 화면에 보여줄 데이터수
public void setDisplay(int var)
{
displayCnt = var;
}
// 페이지 범위를 어디까지 설정할지 부분
public void setPageRange(int var)
{
displayPageRange = var;
}
/**
* internal use
* <p>
*/
private void assignPage()
{
int pageRange = 0;
previousPage = ((int)((pageNo - 1)/displayPageRange))*displayPageRange;
nextPage = ((int)((pageNo - 1)/displayPageRange) + 1)*displayPageRange + 1;
lastPage = nextPage;
if(totalCount <= (nextPage -1 )*displayCnt){
pageRange = 1;
if(totalCount%displayCnt != 0){
pageRange = 2;
}
lastPage = (int)(totalCount/displayCnt) + pageRange;
nextPage = 0;
}
}
}