studyplan
페이지네이션 , Pagination 만들어지는 과정 1 본문
페이지 정보를 담을 page class 를 만든다
현재 페이지 값인 pageNum , 현재 페이지의 값을 담을 amount
기본적으로 들어갈 페이지 갯수 , 맨처음에 나올 화면 세팅
setPageNum
setAmount
2. 페이지 메이커를만든다
일단 PAGE_COUNT 라는 상수를 만들고 10 이라는 값을 준다
시작값 끝값을 정하는 필드 beginPage, endPage 를 만든다
이전페이지 다음페이지 버튼을 활성화 시킬 //
boolean 타입의 prev , next 만들어준다
그리고 Page 클래스를 주입받아서 page 객체를 생성하고
총 게시물 수를 세는 totalCount 필드를 만들어준다
// PageMaker 생성자에는
값이 2개가 들어가는데
주입 받은 Page page 와 , totalCount 기본으로 넣어주고
나머지는 makePageInfo() 라는 메서드로 계산해서 값을 넣어준다
makePageInfo() 는
맨처음은
끝 값을 먼저 구해주고 그 값을 통해서 나머지 값들을 정해준다
this.endPage = (int) Math.ceil(page.getPageNum() / (double) PAGE_COUNT) * PAGE_COUNT;
this.endPage = (int) Math.ceil(page.getPageNum() / (double) PAGE_COUNT) * PAGE_COUNT;
끝값 = (int 인트로 변환 ) Math.ceil(올림) (page.getPageNum() 현재 페이지수 / (double 소수점) 한화면에 배치할 페이지수 !) * 한 화면에 배치할 페이지 수 =
한 화면에 배치할 페이지 수 = 10 개씩 !!
여기서 endPage 값은 10 , 20 을 말하는것인데
이 그림의 경우 계산이
this.endPage = (int) Math.ceil(1 / (double)10) * 10 이된다
이걸 계산하면
this.endPage = (int) Math.ceil(0.1) * 10
this.endPage = (int) 1.0 * 10
this.endPage = 10 이된다
위 그림의 경우 계산이
this.endPage = (int) Math.ceil(11 / (double)10) * 10 이된다
이걸 계산하면
this.endPage = (int) Math.ceil(1.1) * 10
this.endPage = (int) 2.0 * 10
this.endPage = 20 이된다
이렇게 endPage 를 구하면
beginPage 를 구할수 있게 되는데
this.beginPage = endPage - PAGE_COUNT + 1;
this.beginPage = endPage - PAGE_COUNT + 1; 이런 공식을 대입하면
첫번째 경우
this.beginPage = 10 - 10 + 1;
this.beginPage = 1 이 되고
두번째 경우
this.beginPage = 20 - 10 + 1;
this.beginPage = 11 이 된다
앞에서처럼 값이 떨어지는 경우라면 저런 공식으로도 가능하지만
총 게시물이 237 개라면
10 개 짜리 페이지 2 개와 4개짜리 페이지가 필요하다 그래서 마지막 페이지 수를 보정해줄 realEnd 공식이 필요하다
int realEnd = (int) Math.ceil(totalCount / (double) page.getAmount());
int realEnd = (int) Math.ceil(totalCount / (double) page.getAmount());
int realEnd = (int) Math.ceil(총 게시물수 / (소수점 변환) 한 페이지당 보여줄 게시물 수 !
int realEnd = (int) Math.ceil(237 / 10.0)
int realEnd = (int) Math.ceil(23.7)
int realEnd = (int) 24.0
int realEnd = 24
이런 결과가 나온다
하지만 2가지 모두 쓸수 없기 때문에 경우를 나눠줘야 한다
총 게시물 수가 237 개라면
this.endPage = (int) Math.ceil(21 / (double) 10) *10
this.endPage = (int) 3.0 *10
this.endPage = 30 이고
int realEnd = (int) Math.ceil(237 / 10.0)
int realEnd = (int) Math.ceil(23.7)
int realEnd = (int) 24.0
int realEnd = 24
이렇게 숫자가 달라진다
왠만하면 .. realEnd가 많이 나오긴 한다
마지막으로 앞으로갈지 뒤로갈지 정해주는 prev , next 는
이런 공식이 필요한데
말 그대로 ,,
이전으로 가려면 무조건 1보다는 커야 .. 뒤로 갈것이고
next 는 왠만하면 있는데
이렇게 ..
andPage가 40 이고
realEnd가 32 이면 .. 성립 할수가 없다
'스프링' 카테고리의 다른 글
스프링 부트 파일 업로드 제한 / spring boot file upload limit (0) | 2022.08.01 |
---|---|
페이지네이션 , Pagination 만들어지는 과정 2 (0) | 2022.07.29 |
mybatis xml 작성법 마이바티스 / oracle 버전 / select , delete , insert , resultMap , resultType (0) | 2022.07.27 |
Execution failed for task 오류 // 해결방법 (0) | 2022.07.27 |
java.lang.StringIndexOutOfBoundsException: 에러 해결 . 방지 (0) | 2022.07.27 |