본문 바로가기
스프링 쇼핑몰 만들어보기

페이지 나누기 (pagination)

by hoshi03 2024. 5. 5.

글이 500만개가 있을때 한번에 다 보여줄 수는 없다

 

Repository에 Pageable을 선언하고

Page<Item> findPageBy(Pageable page);

 

/list/page/1 형태로 들어오면 페이지를 가져오는 코드를 작성한다

items에 담아둔 page는 html에서 반복문을 돌면서 해당하는 페이지의 아이템들을 가져올 수 있다

PageRequest는 0부터 시작해서 n개를 가져오니 -1을 해줬다

@GetMapping("/list/page/{id}")
String getListPage(Model model, @PathVariable Integer id){
    //n번째 페이지에서 m개 가져온다
    Page<Item> page = itemRepository.findPageBy(PageRequest.of(id-1, 5));
    model.addAttribute("items",page);
    return "list.html";
}

 

html에는 아래처럼 페이지 버튼을 만들어서 클릭하면 해당 페이지로 넘어갈 수 있게 했다

<div th:each="pageNumber : ${#numbers.sequence(1, pages)}">
    <form th:action="@{'/list/page/' + ${pageNumber}}" method="get" style="display: inline;">
        <button type="submit" th:text="${pageNumber}">Page</button>
    </form>
</div>