🔥 Vamos/Spring

0226 | 스프링의 정석 :: 4-3 (게시판 페이징)

unikue 2023. 2. 27. 00:10

게시판 목록 만들기와 페이징

 

 

1. 게시물 목록 페이징

: boardList.jsp로 띄우기 전에 우리가 원하는대로 페이징이 됐는지 TDD로 테스트 함

 

 

 

 

 

 2. LIMIT[offset,] row_count

: 테이블에 들어있는 데이터를 페이지별로 가져오려면 select문의 LIMIT을 사용해야 함

: 리스트 맨 처음부터 얼마나 떨어져 있는가 - offset

: 읽어올 row 의 수 - row_count

 

 


    public PageHandler(int totalCnt, int page, int pageSize){
        this.totalCnt = totalCnt;
        this.page=page;
        this.pageSize=pageSize;

        totalPage = (int) Math.ceil(totalCnt/(double) pageSize); // 페이지가 부족할경우 +1 해야해서 올림으로 처리
        beginPage = page/naviSize * naviSize +1;
        endPage = Math.min(beginPage + naviSize -1, totalPage); // 한 페이지를 다 채우지 못한 경우 네비와 토탈 중 작은 값을 마지막 페이지로 씀. 삼항연산자도 가능
        showPrev = beginPage !=1; //  1일땐 prev가 나올 이유가 없으므로 false로 설정함
        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]" : "");
    }

이 파트를 하면서 자바 공부할때 풀었던 여러가지 문제들이 다 이런걸 위한 빌드업이었구나...라는 생각이 들었다. (물론 이것도 기초중의 생기초지만)

이걸 어떻게 실제로 써먹지??했던게 이렇게...!

 

 

@Test
public void test(){
    PageHandler ph = new PageHandler(250,1); // 페이지가 25개 나와야 함
    ph.print();
    System.out.println("ph=" + ph);
    assertTrue(ph.beginPage==1);
    assertTrue(ph.endPage==10);
}

@Test
public void test3(){
    PageHandler ph = new PageHandler(255,25); // 페이지가 26개 나와야 함
    ph.print();
    System.out.println("ph=" + ph);
    assertTrue(ph.beginPage==21);
    assertTrue(ph.endPage==26);
}

 

👉 처음과 끝부분에 대한 테스트.

👉 +1로 26페이지를 생성시 totalPage가 int끼리 나누면 올림을 해도 그대로이므로, 형변환 활용. (int)(255/(double)10)

👉 prev/next 메뉴가 잘 뜨는지 확인 필요.