페이지네이션(Pagination)

기록하는 용도·2022년 10월 31일
0

Pagination

1.현재 페이지 번호에(nowPage) 해당하는 게시물 리스트의 시작 row number를 반환

public int getStartRowNumber() {
	return (this.nowPage-1) *this.postCountPerPage+1;
}

현재 페이지가 2페이지라면 1페이지가 갖고있는(페이지당 게시물수) + 1을 하면 2페이지의 첫번째 게시물의 no를 반환할 수 있다.



2. 현재 페이지 번호(nowPage) 에 해당하는 게시물 리스트의 게시물 row의 마지막 번호를 반환

public int getEndRowNumber() {
	int endRowNumber=this.nowPage * this.postCountPerPage;
	if(this.totalPostCount < endRowNumber)
		endRowNumber = this.totalPostCount;
	return endRowNumber;
}

현재 페이지와 페이지당 조회되는 페이지를 곱하면 현재 페이지에 나타내야할 마지막 게시물 번호를 반환한다.



3. 총 페이지 수를 반환

public int getTotalPage() {
	int totalPage=totalPostCount / postCountPerPage;
    if(totalPostCount % postCountPerPage != 0) { // 나머지가 0이 아니면 
    totalPage += 1;
    }
    return totalPage;
}

전체 게시물의 수를 페이지당 출력되어야하는 게시물의 수(5)로 나누면 페이지의 수를 반환한다.
이 수가 0으로 떨어지지않으면 페이지의 수에 1을 추가해 반환한다.



4. 총페이지 그룹수를 반환

public int getTotalPageGroup() {
	int totalPageGroup=this.getTotalPage()/pageCountPerPageGroup;
	if(this.getTotalPage()%pageCountPerPageGroup!=0) //나눈값의 나머지가 0이 아니면
		totalPageGroup = this.getTotalPage()/pageCountPerPageGroup+1;
	return totalPageGroup;
}

전체 페이지를 페이지 그룹당 가지는 페이지의 수(4)로 나누면 총 몇페이지 그룹을 반환해야하는지 알 수 있다.
0으로 떨어지지않으면 1을 더해 반환한다.



5. 현재 페이지가 속한 페이지 그룹이 몇번째 그룹인지를 리턴

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을 더해 현재 페이지 그룹을 반환한다.



6.현재 페이지가 속한 그룹의 시작 페이지 번호를 반환

public int getStartPageOfPageGroup() {
	return (this.getNowPageGroup() -1)* this.pageCountPerPageGroup +1;
}

현재 페이지가 6페이지로, 2그룹에 속한다면 현재페이지그룹-1과 페이지그룹당페이지수를 곱하고 1을 더하면 내가 속한 페이지그룹의 시작 페이지 번호를 반환한다.(5)

7. 현재 페이지 그룹의 마지막 번호를 리턴

public int getEndPageOfPageGroup() {
	int endPage=this.getNowPageGroup() * this.pageCountPerPageGroup;
	if(this.getTotalPage() < endPage) // 곱한 값이 총 페이지수보다 크면
		endPage = this.getTotalPage();
	return endPage;
}

내가 7페이지라면 현페이지그룹과 페이지그룹당페이지수를 곱한다.
끝페이지가 곱한값보다 크다면 이 수가 끝페이지라는 뜻이기때문에 끝페이지를 할당해 리턴한다.



8.이전 페이지 그룹이 존재하는 지 여부를 리턴

public boolean isPreviousPageGroup() {
	boolean flag=false;
	if(this.getNowPageGroup()>1)
		flag=true;
	return flag;
}

이 메소드는 처음페이지그룹이라면 이전페이지그룹이 존재하지않으므로 그 버튼을 나타나지 않게하기 위한 메소드이다.



9.

public boolean isNextPageGroup() {
	boolean flag=false;
    if(this.getTotalPageGroup()> this.getNowPageGroup())
		flag=true;
	return flag;
   }

8번 메소드와 마찬가지로 끝페이지 그룹이라면 다음페이지그룹으로 넘어가는 버튼의 여부를 따지기 위한 메소드이다.

Pagination.java 전체 코드



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;
	}
}






0개의 댓글