페이징 처리하기 전 생각해봐야하는 부분
한 페이지에 몇개의 글을 보여 줄 것인지?, 페이징 부분에 몇개의 페이지를 표시 할 것이지?
페이지가 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으로 파라미터를 받아 왔을 때 파라미터가 없으면 첫번째 페이지를 출력
'프로그래밍 > Spring' 카테고리의 다른 글
[MyBatis] 동적 태그들(trim, foreach) (0) | 2020.12.23 |
---|---|
[MyBatis] 동적 태그들(if, choose) (0) | 2020.12.23 |
[JSTL] jsp에서 url의 get parameter 가져오는 방법 (0) | 2020.12.11 |
[JSTL]javascript에서 context path를 가져오는 방법 (0) | 2020.12.11 |
[JSTL]javascript에서 model parameter를 가져오는 방법 (0) | 2020.12.11 |