PageHandler 기술 설명

김도형·2022년 10월 25일
0

PageHandler 요소 정의

  • pageSize : 한 페이지의 크기
  • naviSize : 페이지 내비게이션의 크기
  • page : 현재 페이지
  • beginPage : 내비게이션의 첫번째 페이지
  • endPage : 내비게이션의 마지막 페이지
  • showPrev : 이전 페이지로 이동하는 링크를 보여줄 것인지의 여부
  • showNext : 다음 페이지로 이동하는 링크를 보여줄 것인지의 여부

PageHandler 요소 계산

totalPage(전체 페이지 개수)

  • 전체 페이지 개수 = 총 게시물 갯수 / 한 페이지의 크기
totalPage = (int)Math.ceil(totalCnt / (double)sc.getPageSize());

beginPage(내비게이션의 첫번째 페이지)

  • 내비게이션의 마지막 페이지 = (현재 페이지 - 1)/ 페이지 내비게이션의 크기 * 페이지 내비게이션의 크기 +1)
beginPage = (sc.getPage()-1) / navSize * navSize + 1;

endPage(내비게이션의 마지막 페이지)

  • 아래 조건일 경우, 전체 페이지가 내비게이션의 마지막 페이지이다. (endPage == totalPage)
    • 전체 페이지 = 3, 페이지 내비게이션의 크기 = 5
  • 위 경우가 아닐 경우,
    • 내비게이션의 첫번째 페이지 + 페이지 내비게이션의 크기 -1
endPage = Math.min(beginPage + navSize - 1, totalPage);

이전 or 다음 페이지로 이동하는 링크 보여줄 지 여부(showPrev, showNext)

  • showPrev = beginPage != 1; → beginPage가 1이면 showPrev 안나와도 됨.
  • showNext = endPage != totalPage; → endPage 가 totalPage 같으면 showNext 안나와도됨

LIMIT[offset], row_count

  • row_count 읽어올 row 수
    • row_count == pageSize(한 페이지의 크기)
  • offset == (page-1) * pageSize

게시물 목록 페이징 URL 및 jsp

  • Java : list 메서드(RvwController.java)
  • jsp : rvwList.jsp

showPrev

<c:if test="${ph.showPrev}">
	<a class="page" href="<c:url value="/review/list${ph.sc.getQueryString(ph.beginPage-1)}"/>">&lt;</a>
</c:if>

showNext

<c:if test="${ph.showPrev}">
	<a class="page" href="<c:url value="/review/list${ph.sc.getQueryString(ph.beginPage-1)}"/>">&lt;</a>
</c:if>

page navi

  • 현재 페이지 요소의 class name이 page -> page paging-active 변경
<c:forEach var="i" begin="${ph.beginPage}" end="${ph.endPage}">
	<a class="page ${i==ph.sc.page? "paging-active" : ""}" href="<c:url value="/review/list${ph.sc.getQueryString(i)}"/>">${i}</a>
</c:forEach>
profile
3년간 웹/앱, 자동제어 QA 🔜 개발자로 전향하여 현재 교육 회사에서 백엔드 개발자로 근무 중입니다.(LinkedIn : https://www.linkedin.com/in/dohyoung-kim-5ab09214b)

0개의 댓글