public int getStartRowNumber() {
return (this.nowPage-1) *this.postCountPerPage+1;
}
현재 페이지가 2페이지라면 1페이지가 갖고있는(페이지당 게시물수) + 1을 하면 2페이지의 첫번째 게시물의 no를 반환할 수 있다.
public int getEndRowNumber() {
int endRowNumber=this.nowPage * this.postCountPerPage;
if(this.totalPostCount < endRowNumber)
endRowNumber = this.totalPostCount;
return endRowNumber;
}
현재 페이지와 페이지당 조회되는 페이지를 곱하면 현재 페이지에 나타내야할 마지막 게시물 번호를 반환한다.
public int getTotalPage() {
int totalPage=totalPostCount / postCountPerPage;
if(totalPostCount % postCountPerPage != 0) { // 나머지가 0이 아니면
totalPage += 1;
}
return totalPage;
}
전체 게시물의 수를 페이지당 출력되어야하는 게시물의 수(5)로 나누면 페이지의 수를 반환한다.
이 수가 0으로 떨어지지않으면 페이지의 수에 1을 추가해 반환한다.
public int getTotalPageGroup() {
int totalPageGroup=this.getTotalPage()/pageCountPerPageGroup;
if(this.getTotalPage()%pageCountPerPageGroup!=0) //나눈값의 나머지가 0이 아니면
totalPageGroup = this.getTotalPage()/pageCountPerPageGroup+1;
return totalPageGroup;
}
전체 페이지를 페이지 그룹당 가지는 페이지의 수(4)로 나누면 총 몇페이지 그룹을 반환해야하는지 알 수 있다.
0으로 떨어지지않으면 1을 더해 반환한다.
public int getNowPageGroup() {
int nowPageGroup=this.nowPage/this.pageCountPerPageGroup;
if(nowPage%pageCountPerPageGroup!=0)
nowPageGroup+=1;
return nowPageGroup;
}
현재 페이지를 페이지그룹당 페이지수(4)로 나눈다.
0으로 나누어떨어지지않으면 1을 추가해 리턴한다.
현재 페이지가 2페이지라면 1그룹에 속한다.
2%4에 1을 더해 현재 페이지 그룹을 반환한다.
public int getStartPageOfPageGroup() {
return (this.getNowPageGroup() -1)* this.pageCountPerPageGroup +1;
}
현재 페이지가 6페이지로, 2그룹에 속한다면 현재페이지그룹-1과 페이지그룹당페이지수를 곱하고 1을 더하면 내가 속한 페이지그룹의 시작 페이지 번호를 반환한다.(5)
public int getEndPageOfPageGroup() {
int endPage=this.getNowPageGroup() * this.pageCountPerPageGroup;
if(this.getTotalPage() < endPage) // 곱한 값이 총 페이지수보다 크면
endPage = this.getTotalPage();
return endPage;
}
내가 7페이지라면 현페이지그룹과 페이지그룹당페이지수를 곱한다.
끝페이지가 곱한값보다 크다면 이 수가 끝페이지라는 뜻이기때문에 끝페이지를 할당해 리턴한다.
public boolean isPreviousPageGroup() {
boolean flag=false;
if(this.getNowPageGroup()>1)
flag=true;
return flag;
}
이 메소드는 처음페이지그룹이라면 이전페이지그룹이 존재하지않으므로 그 버튼을 나타나지 않게하기 위한 메소드이다.
public boolean isNextPageGroup() {
boolean flag=false;
if(this.getTotalPageGroup()> this.getNowPageGroup())
flag=true;
return flag;
}
8번 메소드와 마찬가지로 끝페이지 그룹이라면 다음페이지그룹으로 넘어가는 버튼의 여부를 따지기 위한 메소드이다.
package org.kosta.myproject.test.pagination;
/**
* 게시판 페이징 처리 로직을 정의한 객체
* @author KOSTA
*
*/
public class PaginationDemo {
/**
* 현재 페이지
*/
private int nowPage=1;
/**
* 페이지당 게시물수
*/
private int postCountPerPage=5;
/**
* 페이지 그룹당 페이지수
*/
private int pageCountPerPageGroup=4;
/**
* 총게시물수 ( 데이터베이스에 저장되어 있는 )
*/
private int totalPostCount; //매번 달라져서 실행할 때마다 총 카운트를 가져온다.
public PaginationDemo(int totalPostCount) { //db에 게시물 수만 할당
this.totalPostCount=totalPostCount;
}
public PaginationDemo(int totalPostCount,int nowPage) {
this.totalPostCount=totalPostCount;
this.nowPage=nowPage; //페이지 바뀔때마다 연산
}
public int getNowPage() {
return nowPage;
}
/**
* 현재 페이지 번호에( nowPage ) 해당하는 게시물 리스트의 시작 row number를 반환 <br>
* 이전 페이지 마지막 번호 + 1 <br>
* 2 페이지의 시작번호는 1 페이지의 마지막 번호 5 + 1 이 시작 번호가 된다. 5라는 값은 postCountPerPage<br>
* 참고 : 사용자가 페이지번호를 클릭하면 ListController에서 페이지번호를 전달받고 <br>
* BoardDAO로부터 총게시물수를 반환받은 후 Pagination 객체를 생성해서 <br>
* findPostList(Pagination) 에 전달하여 현 페이지에 맞는 게시물 리스트를 반환받을 때 사용하기 위한 메서드
*
* @return startRowNumber
*/
public int getStartRowNumber() {
// 이전페이지 페이지당 게시물수 + 1 하면 현 페이지의 시작번호
return (this.nowPage - 1) *this.postCountPerPage + 1;
}
/**
* 현재 페이지 번호(nowPage) 에 해당하는 게시물 리스트의 게시물 row의 마지막 번호를 반환 <br>
* nowPage * postCountPerPage 의 연산결과가 게시물의 마지막 번호이나 <br>
* 만약 totalPostCount(총게시물수) 보다 클 경우에는 totalPostCount(총게시물수)가 <br>
* 현 페이지의 마지막 게시물 row number가 된다
* @return endRowNumber
*/
public int getEndRowNumber() {
int endRowNumber=this.nowPage * this.postCountPerPage;
if(this.totalPostCount < endRowNumber)
endRowNumber = this.totalPostCount;
return endRowNumber;
}
/**
* 총 페이지 수를 반환 <br>
*
* totalPostCount / postCountPerPage 연산값의 나머지가 0 이면 나눈값이 총페이지 수 <br>
* totalPostCount / postCountPerPage 연산값의 나머지가 0 이 아니면 나눈값+1 이 총페이지 수 <br>
*
* 예) 게시물수 1 2 3 4 5 6 7 8 9 10 11 12 <br>
* 1page 2page 3page <br>
* @return totalPage
*/
public int getTotalPage() {
int totalPage=totalPostCount / postCountPerPage;
if(totalPostCount % postCountPerPage != 0) { // 나머지가 0이 아니면
totalPage += 1;
}
return totalPage;
}
/**
* 총페이지 그룹수를 반환 <br>
* getTotalPage() 총페이지수 / pageCountPerPageGroup -> 나머지가 0이면 나눈값이 총그룹수<br>
* -> 나머지가 존재하면 나눈값 + 1 한 값이 총그룹수
* 예) 총게시물수 48개
* 페이지 1 2 3 4 5 6 7 8 9 10
* 페이지그룹 1group 2group 3group
* @return totalPageGroup
*/
public int getTotalPageGroup() {
int totalPageGroup=this.getTotalPage()/pageCountPerPageGroup;
if(this.getTotalPage()%pageCountPerPageGroup!=0) //나눈값의 나머지가 0이 아니면
totalPageGroup = this.getTotalPage()/pageCountPerPageGroup+1;
return totalPageGroup;
}
/**
* 현재 페이지가 속한 페이지 그룹이 몇번째 그룹인지를 리턴 <br>
* nowPage / pageCountPerPageGroup 값의 나머지가 0이면 나눈값이 현재 페이지그룹 <br>
* nowPage / pageCountPerPageGroup 값의 나머지가 0이 아니면 나눈값+1이 현재 페이지그룹
*
* 예) 현재 페이지가 7 page <br>
* page 1 2 3 4 5 6 7
* 1group 2group
* @return nowPageGroup
*/
public int getNowPageGroup() {
int nowPageGroup=this.nowPage/this.pageCountPerPageGroup;
if(nowPage%pageCountPerPageGroup!=0)
nowPageGroup+=1;
return nowPageGroup;
}
/**
* 현재 페이지가 속한 그룹의 시작 페이지 번호를 반환 <br>
*
* 이전페이지그룹 * pageCountPerPageGroup + 1 => 현 페이지 그룹의 시작번호 <br>
*
* 현재페이지그룹 getNowPageGroup -> 2 이면 <br>
* 이전페이지그룹 ( 2-1 ) * pageCountPerPageGroup + 1 => 현재 페이지 그룹의 시작번호 5 <br>
*
* pageNo 1 2 3 4 5 6 7 8 9 10 <br>
* 1group 2group 3group <br>
* @return startPage
*/
public int getStartPageOfPageGroup() {
return (this.getNowPageGroup() -1)* this.pageCountPerPageGroup +1;
}
/**
* 현재 페이지 그룹의 마지막 번호를 리턴 <br>
*
* getNowPageGroup() * pageCountPerPageGroup => 마지막 페이지번호 <br>
* 단 위의 연산값이 getTotalPage() 즉 총페이지수보다 크면 <br>
* getTotalPage() 값이 마지막 페이지 번호가 된다 <br>
*
* pageNo 1 2 3 4 5 6 7 8 9 10 <br>
* 1group 2group 3group <br>
* @return endPage
*/
public int getEndPageOfPageGroup() {
int endPage=this.getNowPageGroup() * this.pageCountPerPageGroup;
if(this.getTotalPage() < endPage) // 곱한 값이 총 페이지수보다 크면
endPage = this.getTotalPage();
return endPage;
}
/**
* 이전 페이지 그룹이 존재하는 지 여부를 리턴 <br>
* getNowPageGroup() 이 1보다 크면 이전 페이지 그룹이 존재 <br>
* @return flag
*/
public boolean isPreviousPageGroup() {
boolean flag=false;
if(this.getNowPageGroup()>1)
flag=true;
return flag;
}
/**
* 다음 페이지 그룹이 존재하는 지 여부를 리턴 <br>
* getTotalPageGroup() 보다 getNowPageGroup() 이 작으면 다음 페이지 그룹이 존재
* @return flag
*/
public boolean isNextPageGroup() {
boolean flag=false;
if(this.getTotalPageGroup()> this.getNowPageGroup())
flag=true;
return flag;
}
}