서비스 구현 - 컨트롤러 연결 - jsp 수정
BoardService 수정하기
1 2 3 4 5 6 7 8 9 10 11 12
| import java.util.List;
@Service public class BoardService { @Autowired private BoardRepository boardRepository; @Transactional(readOnly = true) public Page<Board> postList(Pageable pageable) { return boardRepository.findAll(pageable); } }
|
페이지 설정을 담은 객체인 Pageable을 인수로 받아, Pageable에 맞도록 데이터를 분류한 Page객체를 반환.
BoardController 수정하기
1 2 3 4 5 6 7 8 9 10 11 12
| @Controller public class BoardController { @Autowired private BoardService boardService;
@GetMapping({"/", ""}) public String index(Model model, @PageableDefault(size=3, sort = "id", direction = Sort.Direction.DESC)Pageable pageable){ model.addAttribute("boards", boardService.postList(pageable)); return "index"; }
}
|
스프링에서 html로 데이터를 가져올 때는 Model이 필요하다.
그리고, Pageable에 페이지 설정을 저장해서 인수로 전달한다.
model에 서비스에서 수정한 postList를 boards와 함께 속성을 추가한다.
그리고 index를 반환해서 뷰리졸버가 index.jsp를 찾아 출력하도록한다.
index.jsp 수정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <%@ include file="layout/header.jsp"%>
<div class="container"> <c:forEach var="board" items="${boards.content}"> <div class="card m-2" > <div class="card-body"> <h4 class="card-title">${board.title}</h4> <a href="#" class="btn btn-primary">상세보기</a> </div> </div> </c:forEach> <ul class="pagination justify-content-center"> <%-- 플렉스 성질을 가진 객체를 가운대로 모으기.--%>
<%-- 버튼 누를때마다 페이지 이동 --%> <c:choose> <c:when test = "${boards.first}"> <li class="page-item disabled"><a class="page-link" href="?page=${boards.number-1}">Previous</a></li> </c:when> <c:otherwise> <li class="page-item"><a class="page-link" href="?page=${boards.number-1}">Previous</a></li> </c:otherwise> </c:choose> <c:choose> <c:when test = "${boards.last}"> <li class="page-item disabled"><a class="page-link" href="?page=${boards.number+1}">Next</a></li> </c:when> <c:otherwise> <li class="page-item"><a class="page-link" href="?page=${boards.number+1}">Next</a></li> </c:otherwise> </c:choose> </ul> </div> <%@ include file="layout/footer.jsp"%>
|
page객체는 해당 페이지가 처음인지를 알리는 first, 마지막을 알리는 last, 내용인 content가 있다.
첫 페이지면, previous 버튼을 비활성화하고 마지막 페이지는 next 버튼을 비활성화 한다.