์ด๋ ๊ฒ ๋์ด์๋ ๋ฉ์ธํ๋ฉด์ ์ด์ ์ง์ ์์ฑํ ๊ธ๋ค(Board ํ ์ด๋ธ์ ์ ์ฅ๋)์ ๋ถ๋ฌ์์ ๋ณด์ฌ์ค ๊ฒ์ด๋ค.
@Controller
public class BoardController {
@Autowired
private BoardService boardService;
.
.
.
@GetMapping({"", "/"})
public String index(Model model) {
model.addAttribute("boards", boardService.๊ธ๋ชฉ๋ก());
// /WEB-INF/views/index.jsp
return "index"; // viewResolver ์๋ (@Controller)
}
}
jsp๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ ๋ Model ํ์ํ๋ค. ๋งค๊ฐ๋ณ์์ Model์ ๋ฃ์ด์ค๋ค.
BoardController๋ RestController๊ฐ ์๋ ์ผ๋ฐ Controller์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌํดํ ๋ viewResolver๊ฐ ์๋ํ๋ค.
@Service // ์คํ๋ง์ด ์ปดํฌ๋ํธ ์ค์บ์ ํตํด์ Bean์ ๋ฑ๋ก์ ํด์ค. (IoC)
public class BoardService {
@Autowired
private BoardRepository boardRepository;
.
.
.
public List<Board> ๊ธ๋ชฉ๋ก() {
return boardRepository.findAll();
}
}
findAll ํจ์๋ฅผ ํตํด Board๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์จ๋ค.
head.jsp์ ๋ค์ด์๋
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
๋ฅผ ์ด์ฉํ๋ค. (jstl)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ include file="layout/header.jsp"%>
<div class="container">
<c:forEach var="board" items="${boards}">
<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>
</div>
<%@ include file="layout/footer.jsp"%>
๊ทธ๋ค์ EL ํ๊ธฐ๋ฒ์ผ๋ก items="${boards}"
์ด๋ ๊ฒ ์์ฑํ๋ฉด, ์ปจํธ๋กค๋ฌ์์ model๋ก ๋๊ธด "boards"๊ฐ ๋ฐ์์ง๋ค.
${board.title}
๋ฅผ ํ๋ฉด ์ค์ ๋ก๋ board.getTitle
์ด ํธ์ถ๋๋ค.
Board ๊ฐ์ฒด์์ title์ ๋ํ get ์ ๋ง๋ค์ด๋จ์ผ๋ฏ๋ก (@Data ์ด๋
ธํ
์ด์
) ๋ถ๋ฌ์ฌ ์ ์๋ค.
<c:forEach var="board" items="${boards}">
์์
<c:forEach var="board" items="${boards.content}">
๋ก ๋ฐ๊ฟ์ค๋ค.
content๋ฅผ ๋ถ์ฌ์ผ ํ๋ค!!
<ul class="pagination">
<li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
์์ ์ฝ๋๋ ์ถ๊ฐํด์ค์
์ด๋ ๊ฒ ํ์ด์ง ํ์๋ฅผ ๋ง๋ ๋ค!
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ 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"%>
์ฒซ๋ฒ์งธ ํ์ด์ง์์๋ Previous ๋ฒํผ์ด ๋นํ์ฑํ ๋์ด์ผ ํ๊ณ ,
๋ง์ง๋ง ํ์ด์ง์์๋ Next ๋ฒํผ์ด ๋นํ์ฑํ ๋์ด์ผ ํ๋ค.
๋ฐ๋ผ์ <c:choose> <c:when> <c:otherwise> ...
๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถํ์๋ค.
// ํ์ด์ง url : http://localhost:8000/?page=0
@GetMapping({"", "/"})
public String index(Model model, @PageableDefault(size = 3, sort = "id", direction = Sort.Direction.DESC) Pageable pageable) {
// Page<Board> pagingBoard = boardService.๊ธ๋ชฉ๋ก(pageable);
// List<Board> boards = pagingBoard.getContent(); // getContent() ํ๋ฉด List ํ์
์ผ๋ก ๋ฐ์ ์ ์์
// model.addAttribute("boards", boards);
model.addAttribute("boards", boardService.๊ธ๋ชฉ๋ก(pageable)); // List ๊ฐ ์๋ Page ํ์
์ผ๋ก..
// /WEB-INF/views/index.jsp
return "index"; // viewResolver ์๋ (@Controller)
}
Page ํ์
์ผ๋ก ๋ฐ๋ ์ด์ ๋ index.jsp์์
์ด๋ ๊ฒ ํ์ฌ ํ์ด์ง๋ฅผ ๋ํ๋ด๋ number, ์ฒซ๋ฒ์งธ ํ์ด์ง๋ฅผ ๋ํ๋ด๋ first, ๋ง์ง๋ง ํ์ด์ง๋ฅผ ๋ํ๋ด๋ last ๋ฑ์ ์ฐ๊ธฐ ์ํด์ ์ด๋ค.