ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - PageHandler 페이지네이션 구현
    Java/JAVA 2024. 10. 1. 20:23
    반응형
    
    
    public class PageHandler {
        private int totalCnt; //총 게시물 갯수
        private int pageSize; //한 페이지의 크기
        private int naviSize = 10; //페이지 내비게이션이 크기
        private int totalPage; //전체 페이지의 갯수
        private int page; //현재 페이지
        private int beginPage; //내비게이션의 첫번째 페이지
        private int endPage; //내비게이션의 마지막 페이지
        private boolean showPrev; //이전 페이지로 이동하는 링크를 보여 줄 것인지
        private boolean showNext; //다음 페이지로 이동하는 링크를 보여 줄 것인지
    
        public int getTotalCnt() {
            return totalCnt;
        }
    
        public void setTotalCnt(int totalCnt) {
            this.totalCnt = totalCnt;
        }
    
        public int getPageSize() {
            return pageSize;
        }
    
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
    
        public int getNaviSize() {
            return naviSize;
        }
    
        public void setNaviSize(int naviSize) {
            this.naviSize = naviSize;
        }
    
        public int getTotalPage() {
            return totalPage;
        }
    
        public void setTotalPage(int totalPage) {
            this.totalPage = totalPage;
        }
    
        public int getPage() {
            return page;
        }
    
        public void setPage(int page) {
            this.page = page;
        }
    
        public int getBeginPage() {
            return beginPage;
        }
    
        public void setBeginPage(int beginPage) {
            this.beginPage = beginPage;
        }
    
        public int getEndPage() {
            return endPage;
        }
    
        public void setEndPage(int endPage) {
            this.endPage = endPage;
        }
    
        public boolean isShowPrev() {
            return showPrev;
        }
    
        public void setShowPrev(boolean showPrev) {
            this.showPrev = showPrev;
        }
    
        public boolean isShowNext() {
            return showNext;
        }
    
        public void setShowNext(boolean showNext) {
            this.showNext = showNext;
        }
    
        public PageHandler(int totalCnt, int page){
            this(totalCnt, page, 10);
        }
        public PageHandler(int totalCnt, int page, int pageSize) {
            this.totalCnt = totalCnt;
            this.page = page;
            this.pageSize = pageSize;
    
            totalPage = (int)Math.ceil(totalCnt / (double)pageSize);
            beginPage = (page-1) / naviSize * naviSize +1;
            endPage = Math.min(beginPage + naviSize -1, totalPage);
            showPrev = beginPage !=1;
            showNext = endPage != totalPage;
        }
    
        
        void print(){
            System.out.println("page = " + page);
            System.out.print(showPrev ? "[PREV]" : "");
            for (int i = beginPage; i <= endPage; i++) {
                System.out.print(i+" ");
            }
            System.out.println(showNext ? "[NEXT]": "");
        }
    
        @Override
        public String toString() {
            return "PageHandler{" +
                    "totalCnt=" + totalCnt +
                    ", pageSize=" + pageSize +
                    ", naviSize=" + naviSize +
                    ", totalPage=" + totalPage +
                    ", page=" + page +
                    ", beginPage=" + beginPage +
                    ", endPage=" + endPage +
                    ", showPrev=" + showPrev +
                    ", showNext=" + showNext +
                    '}';
        }
    }

    1. 클래스 개요

    PageHandler 클래스는 게시물의 전체 수, 페이지 크기, 현재 페이지 등의 정보를 바탕으로 네비게이션을 계산하고, PREV, NEXT 링크를 통해 이전/다음 페이지로 쉽게 이동할 수 있도록 하는 역할을 합니다.

    필드 설명

    • totalCnt: 총 게시물의 개수입니다.
    • pageSize: 한 페이지에 표시될 게시물의 개수입니다.
    • naviSize: 페이지 네비게이션 바의 크기입니다. 예를 들어, 10이면 한 번에 최대 10개의 페이지 번호가 표시됩니다.
    • totalPage: 전체 페이지 수를 나타냅니다. 이 값은 totalCnt와 pageSize를 통해 계산됩니다.
    • page: 현재 페이지 번호입니다.
    • beginPage: 네비게이션에서 표시되는 첫 번째 페이지 번호입니다.
    • endPage: 네비게이션에서 표시되는 마지막 페이지 번호입니다.
    • showPrev: 이전 페이지 그룹으로 이동하는 버튼을 표시할지 여부를 결정합니다.
    • showNext: 다음 페이지 그룹으로 이동하는 버튼을 표시할지 여부를 결정합니다.

    생성자

    • PageHandler(int totalCnt, int page): 기본 생성자로, 총 게시물 수와 현재 페이지를 입력받아 pageSize를 기본값 10으로 설정합니다.
    • PageHandler(int totalCnt, int page, int pageSize): 사용자가 pageSize를 직접 지정할 수 있는 생성자입니다. 이 생성자는 네비게이션을 계산하기 위해 주요 정보를 설정하고, totalPage, beginPage, endPage 등을 계산합니다.

     


    @Test를 활용하여 코드 값 검증

    public class PageHandlerTest {
    
        @Test
        public void test(){
            PageHandler ph = new PageHandler(250, 1);
            ph.print();
            System.out.println("ph = "+ ph);
            assertTrue(ph.getBeginPage() == 1);
            assertTrue(ph.getEndPage() == 10);
        }
    
        @Test
        public void test2(){
            PageHandler ph = new PageHandler(250, 11);
            ph.print();
            System.out.println("ph = "+ ph);
            assertTrue(ph.getBeginPage() == 11);
            assertTrue(ph.getEndPage() == 20);
        }
    
        @Test
        public void test3(){
            PageHandler ph = new PageHandler(255, 25);
            ph.print();
            System.out.println("ph = "+ ph);
            assertTrue(ph.getBeginPage() == 21);
            assertTrue(ph.getEndPage() == 26);
        }
    
        @Test
        public void test4(){
            PageHandler ph = new PageHandler(255, 11, 20);
            ph.print();
            assertTrue(ph.getBeginPage() == 11);
            assertTrue(ph.getEndPage() == 13);
        }
    }

     

     

     

    반응형

    댓글

Designed by Tistory.