@GetMapping("/board/list")
public String boardList(Model model, @PageableDefault(page=0, size=10, sort="id", direction=Sort.Direction.DESC) Pageable pageable){
//서비스에서 생성한 리스트를 list라는 이름으로 반환하겠다.
model.addAttribute("list", boardService.boardList(pageable));
return "boardlist";
}
localhost:8080/board/list?page=1&size=10
으로 나오면 page = 1(원래는 index 0부터 시작) size = 10개일때까지 1페이지로 넣고 size가 넘어가면 다음 페이지로 옮겨줍니다. public Page<Board> boardList(Pageable pageable){
//기존 List<Board>값으로 넘어가지만 페이징 설정을 해주면 Page<Board>로 넘어갑니다.
return boardRepository.findAll(pageable);
}
@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);
//페이지블럭 처리
//1을 더해주는 이유는 pageable은 0부터라 1을 처리하려면 1을 더해서 시작해주어야 한다.
int nowPage = list.getPageable().getPageNumber() + 1;
//-1값이 들어가는 것을 막기 위해서 max값으로 두 개의 값을 넣고 더 큰 값을 넣어주게 된다.
int startPage = Math.max(nowPage - 4, 1);
int endPage = Math.min(nowPage+9, list.getTotalPages());
model.addAttribute("list", list);
model.addAttribute("nowPage",nowPage);
model.addAttribute("startPage", startPage);
model.addAttribute("endPage", endPage);
return "boardlist";
}
int nowPage = list.getPageable().getPageNumber() + 1;
- 현재 페이지를 나타내는 변수로 index가 0부터 시작하기 때문에 +1을 해줍니다.int startPage = Math.max(nowPage - 4, 1);
- 현재 페이지에서 가장 앞에 페이지 번호를 보여줄 변수입니다.(이때 max 함수를 사용하는 이유는 현재 페이지에서 -4를 해줬을 때 1보다 작은 수가 나오면 안되기 때문에 1 혹은 현재페이지 - 4 했을 때 더 큰 값을 쓰기 위함입니다.)int endPage = Math.min(nowPage+ + 9, list.getTotalPages());
- 현재 페이지에서 가장 뒤에 페이지 번호를 보여줄 변수입니다. (이때 min 함수를 사용하는 이유는 해당 번호가 넘어가버리면 안 되기 때문입니다. 페이지가 11페이지까지 있을 때 현재 페이지가 3페이지라면 12페이지까지 보이기 때문에 이러면 안 되어서 최소값을 구하는 방식으로 진행했습니다.)<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>게시글 리스트 페이지</title>
</head>
<style>
.layout {
width: 500px;
margin: 0 auto;
margin-top: 40px;
}
</style>
<body>
<div class="layout">
<table>
<thead>
<tr>
<th>글번호</th>
<th>제목</th>
</tr>
</thead>
<tbody>
<tr th:each = "board:${list}">
<td th:text="${board.id}">1</td>
<td >
<a th:text="${board.title}" th:href="@{/board/view(id=${board.id})}"></a>
</td>
</tr>
</tbody>
</table>
<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}" style="color:red"></strong>
</th:block>
</div>
</body>
</html>
<th:block th:each="page:${#numbers.sequence(startPage,endPage)}">
- th: block은 마땅히 쓸 테그가 없을 때 사용합니다. 또한 startPage부터 endPage를 a테그로 출력하고 현재 페이지는 strong - 강조 테그를 사용해서 따로 링크 처리 없이 보여줍니다.
<a th:if="${page != nowPage}" th:href="@{/board/list(page=${page-1})}"th:text ="${page}"></a>
- 현재 페이지가 아닌 경우엔 a테그로 이동할 수 있게 합니다. 이때 localhost:8080/board/list?page=1
부터 쿼리 스트링으로 시작합니다.
<strong th:if="${page==nowPage}" th:text ="${page}" style="color:red"></strong>
- 현재 페이지라면 빨간색으로 강조표시를 해 따로 링크는 걸지 않고 현재 페이지임을 나타내 줍니다.
java.sql.SQLSyntaxErrorException: (conn=601) Unknown column 'board0_.filename' in 'field list'