๐Ÿ”ฅ #12 ๋ฉ”์ธํ™”๋ฉด์—์„œ ๊ธ€ ๋ชฉ๋ก ๋ณด๊ธฐ + ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ

myeonjiยท2022๋…„ 2์›” 21์ผ
0

๋ฉ”์ธํ™”๋ฉด์—์„œ ๊ธ€ ๋ชฉ๋ก ๋ณด๊ธฐ

์ด๋ ‡๊ฒŒ ๋˜์–ด์žˆ๋˜ ๋ฉ”์ธํ™”๋ฉด์— ์ด์ œ ์ง์ ‘ ์ž‘์„ฑํ•œ ๊ธ€๋“ค(Board ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ)์„ ๋ถˆ๋Ÿฌ์™€์„œ ๋ณด์—ฌ์ค„ ๊ฒƒ์ด๋‹ค.

< BoardController >

@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๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.

< BoardService >

@Service // ์Šคํ”„๋ง์ด ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ํ†ตํ•ด์„œ Bean์— ๋“ฑ๋ก์„ ํ•ด์คŒ. (IoC)
public class BoardService {

    @Autowired
    private BoardRepository boardRepository;
    
    .
    .
    .

    public List<Board> ๊ธ€๋ชฉ๋ก() {
        return boardRepository.findAll();
    }
}

findAll ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด Board๋ฅผ ๋ชจ๋‘ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

< index.jsp >

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 ์–ด๋…ธํ…Œ์ด์…˜) ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.


ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ

< index.jsp > ์ถ”๊ฐ€

<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>

์œ„์˜ ์ฝ”๋“œ๋„ ์ถ”๊ฐ€ํ•ด์ค˜์„œ

์ด๋ ‡๊ฒŒ ํŽ˜์ด์ง€ ํ‘œ์‹œ๋ฅผ ๋งŒ๋“ ๋‹ค!

< index.jsp > ์ตœ์ข…

<%@ 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> ... ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ถ„ํ•˜์˜€๋‹ค.

< BoardController >

// ํŽ˜์ด์ง• 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 ๋“ฑ์„ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ ์ด๋‹ค.

profile
๐Ÿ“š

0๊ฐœ์˜ ๋Œ“๊ธ€