페이징 처리(2)

이시원·2022년 10월 11일
post-thumbnail
  • controller -> BoardController.java

package com.study.board.controller;

import com.study.board.entity.Board;
import com.study.board.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class BoardController {

    @Autowired
    private BoardService boardService;

    @GetMapping("/board/list")
    public String boardList(Model model, @PageableDefault(page = 0, size = 10, sort = "id", direction = Sort.Direction.DESC) Pageable pageable) {

        Page<Board> list = boardService.boardList(pageable);

        // 현재 페이지
        // pageable이 가지고 있는 page는 0에서 시작하기 때문에 우리가 보는 부분보다 1이 적다. 그래서 +1
        int nowPage = list.getPageable().getPageNumber() + 1;
        
        // 첫 번째 페이지
        int firstPage = 1;
        
        // 마지막 페이지
        int lastPage = list.getTotalPages();
        
        // 블럭에서 보여줄 시작 페이지
        // Math.max(a,b) -> a,b 둘 중 큰 값을 반환
        // int startPage = Math.max(nowPage - 4, 1);

        // 블럭에서 보여줄 마지막 페이지
        // Math.min(a,b) -> a,b 둘 중 작은 값을 반환
        // int endPage = Math.min(nowPage + 5, list.getTotalPages());
        
        model.addAttribute("list", list);
        model.addAttribute("nowPage", nowPage);
        model.addAttribute("firstPage", firstPage);
        model.addAttribute("lastPage", lastPage);
        // model.addAttribute("startPage", startPage);
        // model.addAttribute("endPage", endPage);
        return "boardlist";
    }
}
  • templates > boardlist.html

	<!-- start페이지부터 end페이지 까지 반복을 할거다    -->
    <th:block th:each="page : ${#numbers.sequence(firstPage,lastPage)}">
        <!-- 만약에 페이지 블록에 보이는 페이지가 현재 페이지와 다르다면 -->
        <a th:href="@{/board/list(page=${page - 1})}" th:if="${page != nowPage}" th:text="${page}"></a>
        <!-- 만약에 페이지 블록에 보이는 페이지가 현재 페이지와 다르다면 -->
        <strong style="color: red" th:if="${page == nowPage}" th:text="${page}"></strong>
    </th:block>

profile
코딩공부

0개의 댓글