하단 페이징블럭에서 반드시 필요한 정보
- 시작 페이지 번호
- 끝 페이지 번호
- 전체 데이터(글)의 개수
- 이전페이지 링크(boolean)와
- 다음페이지 링크(boolean) 구분
ex) 글 총 122개 / 페이지당 10개씩 출력
domain >> PageVO - 페이징 처리에 필요한 정보를 저장하는 객체
[필요정보]
- 총 개수 : totalCount (DB조회)
- 끝페이지번호 endPage = ceil(페이지번호/페이지사이즈) * 블럭의 크기 ceil:올림 - 12페이지 : ceil(12/10)*10= 20 페이지
- 시작페이지번호 startPage = (endPage - 블럭의 크기) +1; 7페이지 : 10-10+1= 1 페이지
- 이전페이지 링크 prev(boolean) = startPage !=1
- 다음페이지 링크 next(boolean) = endPage * pageSize < totalCount
- 블럭의 크기
+get/set 메서드 & 오버라이딩
setTotalCount와 calcData메서드를 위로 올려준 뒤 수정함
package com.itwillbs.domain;
/**
* 페이징 처리에 필요한 정보를 저장하는 객체
* => 총개수, 시작페이지번호, 끝페이지번호, 이전페이지링크, 다음페이지링크, 블럭의 크기
* +Cri(페이지번호, 페이지사이즈)
*
* 총 개수 : totalCount
* 끝페이지번호 : endPage = ceil(페이지번호/페이지사이즈) * 블럭의 크기
* *ceil:올림 - 12페이지 : ceil(12/10)*10= 20 페이지
* 시작페이지번호 : startPage = (endPage - 블럭의 크기) +1;
* *7페이지 : 10-10+1= 1 페이지
* 이전페이지링크 : prev(boolean) = startPage !=1
* 다음페이지링크 : next(boolean) = endPage * pageSize < totalCount
*
*/
public class PageVO {
private int totalCount; // 총개수
private int startPage; // 페이지 블럭 시작번호
private int endPage; // 페이지 블럭 끝번호
private boolean prev; // 이전링크
private boolean next; // 다음링크
private int displayPageNum=10; // 페이지 블럭의 크기
private Criteria cri; //page, pageSize
// 페이지번호, 페이지 사이즈 지정
public void setCri(Criteria cri) {
this.cri = cri;
}
//
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
// 페이징 처리에 필요한 정보를 모두 계산
}
private void calcData() {
// 페이징처리 정보를 모두 계산
// 끝페이지
endPage = (int)Math.ceil(cri.getPage() / (double)displayPageNum)*displayPageNum;
//시작페이지번호
startPage = (endPage-displayPageNum)+1;
//끝페이지 번호체크(글이 없는 경우)
//int tmpEndPage = totalCount / cri.getPageSize() + (totalCount%cri.getPageSize()==0? 0:1);
int tmpEndPage = (int)(Math.ceil(((double)totalCount / cri.getPageSize())));
if(endPage>tmpEndPage) {
endPage = tmpEndPage;
}
// 이전링크
prev = startPage != 1;
prev = startPage == 1 ? false : true;
// 다음링크
next = endPage * cri.getPageSize() < totalCount;
// next = endPage * cri.getPageSize() >= totalCount ? false : true;
// 페이징처리 정보를 계산완
} // calcDate()
/**************************************************/
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public boolean isPrev() {
return prev;
}
public void setPrev(boolean prev) {
this.prev = prev;
}
public boolean isNext() {
return next;
}
public void setNext(boolean next) {
this.next = next;
}
public int getDisplayPageNum() {
return displayPageNum;
}
public void setDisplayPageNum(int displayPageNum) {
this.displayPageNum = displayPageNum;
}
public int getTotalCount() {
return totalCount;
}
public Criteria getCri() {
return cri;
}
@Override
public String toString() {
return "PageVO [totalCount=" + totalCount + ", startPage=" + startPage + ", endPage=" + endPage + ", prev="
+ prev + ", next=" + next + ", displayPageNum=" + displayPageNum + ", cri=" + cri + "]";
}
}
Controller
listALL
package com.itwillbs.domain;
/**
* 페이징 처리에 필요한 정보를 저장하는 객체
* => 총개수, 시작페이지번호, 끝페이지번호, 이전페이지링크, 다음페이지링크, 블럭의 크기
* +Cri(페이지번호, 페이지사이즈)
*
* 총 개수 : totalCount
* 끝페이지번호 : endPage = ceil(페이지번호/페이지사이즈) * 블럭의 크기
* *ceil:올림 - 12페이지 : ceil(12/10)*10= 20 페이지
* 시작페이지번호 : startPage = (endPage - 블럭의 크기) +1;
* *7페이지 : 10-10+1= 1 페이지
* 이전페이지링크 : prev(boolean) = startPage !=1
* 다음페이지링크 : next(boolean) = endPage * pageSize < totalCount
*
*/
public class PageVO {
private int totalCount; // 총개수
private int startPage; // 페이지 블럭 시작번호
private int endPage; // 페이지 블럭 끝번호
private boolean prev; // 이전링크
private boolean next; // 다음링크
private int displayPageNum=10; // 페이지 블럭의 크기
private Criteria cri; //page, pageSize
// 페이지번호, 페이지 사이즈 지정
public void setCri(Criteria cri) {
this.cri = cri;
}
//
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
// 페이징 처리에 필요한 정보를 모두 계산
calcData();
}
private void calcData() {
// 페이징처리 정보를 모두 계산
// 끝페이지
endPage = (int)(Math.ceil(cri.getPage() / (double)displayPageNum))*displayPageNum;
//시작페이지번호
startPage = (endPage-displayPageNum)+1;
//끝페이지 번호체크(글이 없는 경우)
//int tmpEndPage = totalCount / cri.getPageSize() + (totalCount%cri.getPageSize()==0? 0:1);
int tmpEndPage = (int)(Math.ceil(((double)totalCount / cri.getPageSize())));
if(endPage>tmpEndPage) {
endPage = tmpEndPage;
}
// 이전링크
// prev = startPage != 1;
prev = startPage == 1 ? false : true;
// 다음링크
next = endPage * cri.getPageSize() < totalCount;
// next = endPage * cri.getPageSize() >= totalCount ? false : true;
// 페이징처리 정보를 계산완
} // calcDate()
/**************************************************/
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public boolean isPrev() {
return prev;
}
public void setPrev(boolean prev) {
this.prev = prev;
}
public boolean isNext() {
return next;
}
public void setNext(boolean next) {
this.next = next;
}
public int getDisplayPageNum() {
return displayPageNum;
}
public void setDisplayPageNum(int displayPageNum) {
this.displayPageNum = displayPageNum;
}
public int getTotalCount() {
return totalCount;
}
public Criteria getCri() {
return cri;
}
@Override
public String toString() {
return "PageVO [totalCount=" + totalCount + ", startPage=" + startPage + ", endPage=" + endPage + ", prev="
+ prev + ", next=" + next + ", displayPageNum=" + displayPageNum + ", cri=" + cri + "]";
}
}
prev
listAll
1~10페이지일때 이전버튼이 비활성화됨
10페이지 이후에는 이전버튼이 다시 활성화됨
이전 버튼을 눌렀을때 이동할 링크를 넣어주자
next
prev와 마찬가지이다.
버튼을 눌러주니 이전, 다음페이지로 잘 넘어간다!
지금 어느 페이지에있는지 나타내보자.
현재페이지번호와 i가 같으면 현재 페이지에만 색칠이 될거임(삼항연산자 사용)
완성!
'spring · spring boot' 카테고리의 다른 글
[spring] 파일 업로드 (1) | 2023.12.22 |
---|---|
[spring] 전체글 개수 조회 (0) | 2023.12.22 |
[Spring] 페이징 처리 (1)원하는 만큼 데이터 출력 (0) | 2023.12.22 |
getter setter를 사용하는 이유 (0) | 2023.12.22 |
[spring] 관점지향 프로그래밍(AOP)이란? (0) | 2023.12.18 |