페이징 처리하기 전 생각해봐야하는 부분

한 페이지에 몇개의 글을 보여 줄 것인지?,  페이징 부분에 몇개의 페이지를 표시 할 것이지?

 

페이지가 10개씩 보인다고 가정하고 한페이지에 10개의 데이터가 출력 될 때

 

1. 페이징의 끝 번호 계산

this.endPage = (int)(Math.ceil(페이지번호) / 10.0)) * 10;

1페이지의 경우 : Math.ceil(0.1) * 10 = 10

10페이지의 경우 : Math.ceil(1) * 10 = 10

11페이지의 경우 : Math.ceil(1.1) * 10 = 20

 

2. 페이징의 시작 번호 계산

this.startPage = this.endPage - 9;

 

3. total을 통한 endPage의 재계산

realEnd = (int) (Math.ceil((total * 1.0) / amount) );

if (realEnd < this.endPage) {
	this.endPage = realEnd;
    }

총 데이터가 80개가 될 경우 총 endPage는 10이 아닌 8이 되어야 하기에 재계산이 필요

만약 realEnd가 endPage보다 작다면 끝 페이지는 작은 값이 되어야 함

 

4. 이전 계산

this.prev = this.startPage > 1;

이전 페이지는 시작 번호가 1보다 클 경우 존재

 

5. 다음 계산

this.next = this.endPage < realEnd;

realEnd가 끝 번호보다 큰 경우에만 존재

 

 

 

DTO 클래스 설계

public PageDTO(Criteria cri, int total) {
	this.cri = cri;
	this.total = total;
	
	this.endPage = (int) (Math.ceil(cri.getPageNum() / 10.0)) * 10;
	this.startPage = this.endPage - 9;
	
	int realEnd = (int) (Math.ceil((total * 1.0) / cri.getAmount()));
	
	if (realEnd < this.endPage) {
		this.endPage = realEnd;
	}
		
	this.prev = this.startPage > 1;
	this.next = this.endPage < realEnd;
}

 

페이징 설계시 생각해 보아야 할 부분2


예를 들어 1 2 3 4 5 6 7 8 9 로 페이징 처리 된 게시글이 있다고 칠 경우

6번 페이지에서 어느 게시글을 본 후 뒤로가기로 돌아갔을 경우 해당 페이지로 돌아가지 않고 1페이지의 부분으로 돌아가게 됨

 

해결 방안

페이징의 정보를 파라미터로 넘긴다

내가 구현한 방식은 UriComponentsBuilder(여러 개의 파라미터들을 연결해서 URL 형태로 만들어 줌)를 사용해서 파라미터를 url형태로 넘겨서 유지

페이지 번호, 총 게시글의 수, 검색 조건 등을 파라미터로 넘김

여기서 get으로 파라미터를 받아 왔을 때 파라미터가 없으면 첫번째 페이지를 출력

 

+ Recent posts