본문 바로가기
성동스터디 (2021.09.09 ~ ing)/Spring

[Spring] 페이징 글번호 끝에서 부터 표시하기

by juniKang 2021. 12. 24.

 

요구사항

  • 마지막 게시물을 1번으로 시작해서, 글을 삭제해도 건너뜀 없이 글번호가 나올 것.

기존 실행 화면

기존 코드

컨트롤러

@GetMapping("/list")
public String list(Model model,
    @PageableDefault(size = 3, sort = "number", direction = Sort.Direction.DESC) 
    Pageable pageable) { 
  Page<Board> boards = boardRepository.findAll(pageable);
  int startPage = Math.max(1, boards.getPageable().getPageNumber() - 4); 
  int endPage = Math.min(boards.getTotalPages(), boards.getPageable().getPageNumber() + 4);
  model.addAttribute("startPage", startPage);
  model.addAttribute("endPage", endPage);
  model.addAttribute("boards", boards);
  return "board/list";
}

<tr th:each="board : ${boards}">
  <td th:text="${boardStat.index + 1}"></td> //글번호
  ...
</tr>

 


 

수정 방향

max = DB에 있는 모든 데이터 갯수 - 페이지 당 게시글 수 * 페이지번호 

 

수정 후 실행화면

 

수정 코드

컨트롤러

@GetMapping("/page")
public String list(Model model,
    @PageableDefault(size = 3, sort = "number", direction = Sort.Direction.DESC) 
    Pageable pageable) {
  Page<Board> boards = boardRespository.findAll(pageable);
  int startPage = Math.max(1,boards.getpageable().getPageNumber() - 4);
  int endPage = Math.min(boards.getTotalPages(). boards.getPageable().getPageNumber() + 4);
// 추가된 부분 ========
  Long max = boards.getTotalElements() - pageable.getPageSize() * pageable.getPageNumber(); 
  model.addAttriubte("max", max);
// ====================
  model.addAttribute("startPage", startPage);
  model.addAttribute("endPage", endPage);
  model.addAttribute("boards", boards);
  return "board/list";
}

...
<tr th:each="board:${boards}">
  <td th:text="${max - boardStat.index }"></td>  // 글번호
</tr>

 

댓글