dev/Spring

[Spring] Paging

dev_Step 2022. 7. 13. 14:33

>> 페이징

 - 게시판에서 글 페이지처리하는 것을 페이징이라고 하며 페이징을 위한 PageDto 가 있어야 한다.

 - PageDTO에는 페이지에 관한 속성들이 존재한다.

 >> 속성들을 하나씩 생각해보자

 - totalCnt  :  총 게시물의 숫자

 - pageSize  :  한페이지에 나타낼 게시물의 숫자

 - naviSize : 페이지 이동할때 나타낼 페이지의 숫자  < 1 2 3 4 5  > 

 - totalPage : 총페이지 숫자

 - page : 현재 페이지

 - beginePage : 네비게이션에 나타낼 첫번쨰 페이지 숫자

 - endPage : 네비게이션에 나타낼 마지막 페이지 숫자

 - showPrev : 이전페이지 네비게이션을 보여줄지 말지 여부

 - showNext : 다음페이지 네비게이션을 보여줄지 말지 여부

 

>> 여러 속성들중에 정해진 값은 PageSize 하나이고  받아올 값들은 totalCnt, page 만 받아오면 된다.

>> 이를 생성자를 통해서 나머지 값들을 구한다.

 

>> totalPage(총페이지수) 같은경우는 ==>  총 게시물수 / 페이지사이즈 하면되는데 이때 나머지가 나올수 있으므로,

올림처리와, 정수 나누기 정수는 정수이므로, (double) 또는 (Float)으로 형변환후 (int)로 다시 형변환 해준다.

totalPage =  (int)Math.ceil(totalCnt / (double)pageSzie);

 

>>beginPage(네비의 첫번째 페이지) 같은경우는 naviSize에 따라 달라진다, 10이라고 가정하다면

page beginPage
5 1
10 1
13 11
17 11
22 21
25 21

 beginPage = (page-1) / naviSize * naviSize + 1

  * page-1 하는 이유는 경계값에서 10일때 10/10*10+1 -> 11 이 나오기 때문에 현재 페이지에서 -1 을 해줘야함

 

 

>>endPage의 경우는 begine페이지와 naviSize와 연관이 있다 왜냐하면 현재 begine페이지가 11이라면 마지막은 20이 되야 하므로 >> beginPage+naviPage-1 << 이되어야 맞으나 마지막 페이지일 경우는 마지막 페이지가 나와야 하므로 min을 통해 비교해준다.

endPage = Math.min( beginPage+naviPage-1, totalPage )

 

>>showPrev, showNext의 경우는 showPrev는 1이 아닐경우, showNext는 마지막 페이지가 아닐경우만 보여주면된다.

showPrev = beginPage != 1;

showNext = endPage != totalPage;

 

추가로 getter, setter를 생성하고, 실제로 사용해보도록하자

 

=======================================================================================

 

>> 사용자의 요청에 의해 board페이지로 이동할경우 /list 로 요청이 들어간다.

>> 이때 page, pageSize가 매개변수로 들어가게 되는데 이는 int로 하지 않는 이유는 null이 들어왔을떄 int로 형변환이 불가능 하기 때문에 홈페이지 에러가 발생한다 따라서 Integer를 사용하였다.

>>(@Value 를 사용해도 될듯?)

-- if문을 통해서 page, pageSize가 null일 경우 기본 값을 주입해주었다.

-- 또한 페이징하기 위하여 PageHandler를 통해서 page관련 속성들을 얻어 Model에 넘겨주었다.

-- 게시물을 뽑아내기 위하여 boardService를 통해서 List<BoardDto>를 얻어냈다.

 

-- 이때 사용한 map은 SQL문에서 #{offset}, #{pageSize} 에 값을 넣어주므로써 해당 페이지에 관련된 게시물을 얻을수 있다.

 

 

>> 이렇게 Model을 통해서 list, pageHanlder는 JSP로 넘어가게 되는데

>> JSP에서는 foreach를 통해서 넘겨받은 데이터를 사용한다