
우리는 페이징 처리 뿐만이 아니라, 정렬 순서도 생각을 해야 한다.
보통 페이지에서 공지사항이나, 자유게시판을 보면 최근에 올린 글이 제일 상단에 올라가게끔 구현을 해 놓는다.
우선 Controller로 가서

boardList를 수정한다. @PageableDefault라는 어노테이션을 사용하는데,
메서드 매개변수로 Pageable을 받고, 브라우저 요청 파라미터로 Pageable에 값을 넘길 수 있다.
ex) localhost:8080/board/list?page=3&size=5
페이징을 처리 할 클래스도 따로 만들어 줘야 하고, 쿼리문도 적어줘야 하는데 findAll 메서드를 사용 할 때
pageable 클래스를 넘겨주면 간단하게 처리가 가능하다,
- page : default 페이지
- size : 한 페이지 게시글 수
- sort : 정렬 기준 컬럼
- direction : 정렬순서 ... DESC(역순)
서비스로 가서 게시물 리스트 로직도 바꿔 주자.

매개변수가 없을 땐 리턴 값을 List로 줬지만, 매개변수에 Pageable을 줘서 Page 클래스로 리턴을 해야 한다.

주소창에 파라미터값으로 page=3&size=5 를 줬더니 정상적으로 값이 넘겨진다.
이제 페이지 블럭을 구현 하자.
BoardController로 가서

Page 타입의 제네릭 타입으로 Board를 넣고, list는 boardService의 boardList와 pageable을 넘겨준다.
(boardService.boardList(pageable)) 를 따로 빼줌.
nowPage는 현재 페이지를 보여주고,
list.getPageable().getPageNumber(); - pageable에서 넘어온 현재 페이지를 가져올 수 있다.
여기서 +1을 하는 이유는, Pageable에서 가져온 페이지는 0부터 시작 하기 때문에 +1을 했다.
startPage는 블럭에서 보여 줄 첫 페이지이고,
만약 현재 페이지가 1페이지라면, -4를 할 때 음수가 나오게 된다.
자바의 Math.max() 메서드를 통해 두 값을 비교해서 높은 값을 꺼내게 되면, 1보다 작은 수가 나오지 않게 된다.
endPage는 블럭에서 보여 줄 마지막 페이지이고,
startPage와 마찬가지로 nowPage가 9이고, TotalPage가 10인데, nowPage에서 + 를 해버리게 되면
TotalPage를 넘어가게 된다.
그래서 자바의 Math,min() 메서드를 통해 두 값을 비교 해 현재 페이지 수 보다 넘어가지 않게 한다.
html에서 사용하기 위해 model을 이용해 startPage, nowPage, endPage를 뿌려주고
boardlist.html로 가자!
<th:block th:each="page : ${#numbers.sequence(startPage, endPage)}">
<a th:if="${page != nowPage}" th:href="@{/board/list(page= ${page-1})}" th:text="${page}"></a>
<strong th:if="${page == nowPage}" th:text="${page}"></strong>
</th:block>
- th:text - 태그 안에 데이터 출력
- th:each - 반복문
- th:each - "${number : #niumber(시작 번호, 끝 번호)}" -> 시작 번호에서 끝 번호까지 반복
- th:block - th:each를 사용하기 위해, th:block을 활용한다. 내부 태그들을 묶는 용도

첫 페이지는 1페이지로 가며, 3번을 누르게 되면 strong 태그에 의해 숫자가 진해진다.
Sort.Direction.DESC 로 인해 역순으로도 잘 보여진다.
'Backend > SPRINGBOOT' 카테고리의 다른 글
[SpringBoot] SpringBoot, JWT 오류 The signing key's size is 240 bits which is not secure enough for the HS256 algorithm (0) | 2022.11.14 |
---|---|
[SpringBoot] 게시판 만들기 9. 검색 (0) | 2022.11.01 |
[SpringBoot] 게시판 만들기 8. 파일 업로드 (0) | 2022.11.01 |
[SpringBoot] 게시판 만들기 7. 처리 메시지 (0) | 2022.10.31 |
[SpringBoot] 게시판 만들기 6. 게시글 수정 (0) | 2022.10.31 |