ํ์ด์ง ๋ค์ด์ ์ ๊ฒ์๊ธ์ด ๋์ด๋ ๊ฒฝ์ฐ
ํ ํ์ด์ง์ ๋ชจ๋ ๊ฒ์๊ธ์ ์ถ๋ ฅํ๋ฉด ์๋์ ๊ฐ์ด ์คํฌ๋กค์ด ๊ธธ์ด์ง๊ฒ๋๋ค.
๊ทธ๋์ ํ ํ์ด์ง์ ์ถ๋ ฅ๊ฐ๋ฅํ ๊ฒ์๊ธ ๊ฐ์๋ฅผ ์ ํํ์ฌ 1ํ์ด์ง 2ํ์ด์ง ๋ฑ ๋์ด๊ฐ๋๋ก ์๋ํ๋ ๊ธฐ๋ฅ


- ๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฌธ์์ ์ฒ๋ฆฌํ๋ Spring MVC์ ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ํ ์ ์๋๋ก ์ง์ํจ

#page per board count , pagination count
page.listcnt = 10
page.paginationcnt = 10
๊ฒ์๊ธ ๊ฐ์์ ํ์ด์ง ๊ฐ์

BoardController
//ํ์ด์ง๋ค์ด์
์ถ๊ฐ
@GetMapping("/main")
public String main(@RequestParam("info_idx") int info_idx,
Model model , @RequestParam(value = "page",defaultValue = "1")int page) {
model.addAttribute("info_idx", info_idx);
model.addAttribute("boardName",boardService.getBoardName(info_idx));
model.addAttribute("list", boardService.getContentList(info_idx,page));
return "board/main";
}
requestParam ์ถ๊ฐ page , ๋ํดํธ ๋ฒจ๋ฅ๋ 1์
ํ๋ผ๋ฏธํฐ page๋ฅผ ๋ฐ๋๋ฐ ๋ง์ฝ ์์ผ๋ฉด ์๋ฌ๊ฐ๋จ
๊ทธ๋์ ๋ช ํ์ด์ง์ธ์ง ๋ชจ๋ฅผ ๊ฒฝ์ฐ์๋ ๊ทธ๋์ defaultValue "1"(๋ฌธ์์ด)
ํ๋ผ๋ฏธํฐ๋ ์ฃผ์์ฐฝ์ผ๋ก ๋์ด์ฌ ๋ ๋ค ๋ฌธ์์ด์ธ๋ฐ int๋ก ๋ณํ (์๋๋ณํ -ํ๋ ์์ํฌ ๋๋ถ)
BoardService
// ํ๋กํผํฐ์์ ๊ฐ์ ธ์ค๋ ๊ฐ
@Value("${page.listcnt}")
private int page_listcnt;
@Value("${page.paginationcnt}")
private int page_paginationcnt;
// ๊ฒ์๊ธ ๋ชฉ๋ก ์ถ๋ ฅ (ํ์ด์ง๋ค์ด์
์ถ๊ฐ)
public List<ContentVO> getContentList(int info_idx, int page) {
//ํ์ด์ง๋ค์ด์
//์์์ธ๋ฑ์ค = ( ํ์ด์ง๋ฒํธ - 1 ) * 10
int start = (page-1)*page_listcnt;
//๋ง์ด๋ฐํฐ์ค์ RowBounds ํด๋์ค๋ฅผ ์ฌ์ฉํด ๊ฐ์ ธ์ฌ ๊ธ์์ ๋ฒํธ, ๊ฐ์ ธ์ฌ๊ฐฏ์๋ก ์ค์
RowBounds rowBounds = new RowBounds(start,page_listcnt);
//๋งคํผ์์ ์ฒ๋ฆฌํ๋๋ก rowBounds ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ถ๊ฐ
return boardDAO.getContentList(info_idx,rowBounds);
}
BoardDAO
//๊ฒ์๊ธ ๋ชฉ๋ก ์ถ๋ ฅ(ํ์ด์ง๋ค์ด์
์ถ๊ฐ)
public List<ContentVO> getContentList(int info_idx, RowBounds rowBounds){
return sqlTemplate.selectList("board.getBoardList", info_idx, rowBounds);
}
์ปจํธ๋กค๋ฌ์์ ํ์ด์ง๋ฅผ ๋ฐ์
์๋น์ค์ ํ์ด์ง๊ฐ ๋ค์ด๊ฐ
ํ์ด์ง ๊ฐ์๋ฅผ ๋ฏธ๋ฆฌ ํ๋กํผํฐ์์ ๋ฐ์์ด
sqltemplate๊ฐ์ฑ์ rowBounds๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์๋์ผ๋ก ๊ณ์ฐ๋จ
rowBounds์๋ ์์ํ๋ ๊ธ ๋ฒํธ๋ , ๋ช ๊ฐ์ฉ ๋ค์ด๊ฐ๋์ง๊ฐ ๋ค์ด๊ฐ
๊ณ์ฐ์ํด์ list๋ก ๋ค๊ณ ์ด -> boardMapper.xml์ ์์ ํ ํ์๊ฐ ์์

ํ ์คํธํ๊ธฐ

ํ์ฌ ์์ ๊ฒ์ํ์ ๋ค์ด๊ฐ๋ฉด page ์ ๊ฐ์ด ์์ด์ default์ธ 1์ด ๋์ด
๊ทธ๋์
page 2๋ฅผ ๋ฃ์ผ๋ฉด ์๋์ ๊ฐ์ด 2ํ์ด์ง๊ฐ ๋์ด

์ ๊ธ ์์ฑํ๊ณ ์ค์ ๋ก ๋ง๊ฒ ์ถ๋ ฅ๋๋์ง ํ์ธํ๊ธฐ


์ด์ ํ๋จ์ ํ์ด์ง๋ฅผ ํด๋ฆญํ๋ฉด ํด๋นํ์ด์ง๋ก ์ด๋ํ๋๋ก ํ ์์

package com.demo.domain;
public class PageBean {
// ์ต์ ํ์ด์ง ๋ฒํธ
private int min;
// ์ต๋ ํ์ด์ง ๋ฒํธ
private int max;
// ์ด์ ๋ฒํผ์ ํ์ด์ง ๋ฒํธ
private int prevPage;
// ๋ค์ ๋ฒํผ์ ํ์ด์ง ๋ฒํธ
private int nextPage;
// ์ ์ฒด ํ์ด์ง ๊ฐ์
private int pageCnt;
// ํ์ฌ ํ์ด์ง ๋ฒํธ
private int currentPage;
// contentCnt : ์ ์ฒด๊ธ ๊ฐ์, currentPage : ํ์ฌ ํ์ด์ง ๋ฒํธ,
// contentPageCnt : ํ์ด์ง๋น ๊ธ์ ๊ฐ์, paginationCnt : ํ์ด์ง ๋ฒํผ์ ๊ฐ์
public PageBean(int contentCnt, int currentPage, int contentPageCnt, int paginationCnt) {
// ํ์ฌ ํ์ด์ง ๋ฒํธ
this.currentPage = currentPage;
// ์ ์ฒด ํ์ด์ง ๊ฐ์
pageCnt = contentCnt / contentPageCnt;
if (contentCnt % contentPageCnt > 0) {
pageCnt++;
}
// ํ์ด์ง๋ค์ด์
์ต์๊ฐ, ์ต๋๊ฐ
min = ((currentPage - 1) / paginationCnt) * paginationCnt + 1;
max = min + paginationCnt - 1;
// ์ต๋๊ฐ์ด ์ค์ ์ต๋ํ์ด์ง๋ณด๋ค ํฌ๋ฉด ์ต๋ํ์ด์ง๋ก ์ค์
if (max > pageCnt) {
max = pageCnt;
}
// ์ด์ ํ์ด์ง๊ฐ, ๋ค์ํ์ด์ง๊ฐ
prevPage = min - 1;
nextPage = max + 1;
// ๋ค์ํ์ด์ง๊ฐ ์ต๋ํ์ด์ง๋ณด๋ค ํฌ๋ฉด ์ต๋ํ์ด์ง๋ก ์ค์
if (nextPage > pageCnt) {
nextPage = pageCnt;
}
}
//๊ฒํฐ ์์ฑ
public int getMin() {
return min;
}
public int getMax() {
return max;
}
public int getPrevPage() {
return prevPage;
}
public int getNextPage() {
return nextPage;
}
public int getPageCnt() {
return pageCnt;
}
public int getCurrentPage() {
return currentPage;
}
}
contentPageCnt ์ paginationCnt ๊ฐ์ ์ด๋ฏธ ์ ํด์ ธ ์์
currentPage , contentCnt ๋ง ๊ณ์ฐํ๋ฉด ๋จ
BoardService
// ํ์ด์ง๋ค์ด์
๊ณ์ฐ
public PageBean getContentCnt(int info_idx,int currentPage) {
//๊ฒ์ํ๋ณ๋ก ๊ฒ์๊ธ ๊ฐ์๋ฅผ ๊ฐ์ ธ์ด .
int content_cnt = boardDAO.getContentCnt(info_idx);
PageBean pageBean = new PageBean(content_cnt, currentPage, page_listcnt, page_paginationcnt);
return pageBean;
}
boardMapper.xml
<select id="contentCnt" parameterType="Integer" resultType="Integer" >
SELECT COUNT(*)
FROM board
WHERE info_idx = #{info_idx}
</select>
BoardDAO
//ํ์ด์ง๋ค์ด์
๊ณ์ฐ(๊ฒ์ํ ๋ณ ๊ฒ์๊ธ ๊ฐ์)
public int getContentCnt(int info_idx) {
return sqlTemplate.selectOne("board.contentCnt", info_idx);
}
BoardController
//ํ์ด์ง๋ค์ด์
์ถ๊ฐ
@GetMapping("/main")
public String main(@RequestParam("info_idx") int info_idx,
Model model , @RequestParam(value = "page",defaultValue = "1")int page) {
model.addAttribute("info_idx", info_idx);
model.addAttribute("boardName",boardService.getBoardName(info_idx));
model.addAttribute("list", boardService.getContentList(info_idx,page));
//ํ์ด์ง๋ค์ด์
๊ณ์ฐ
PageBean pageBean = boardService.getContentCnt(info_idx, page);
model.addAttribute("pageBean", pageBean);
return "board/main";
}
main.jsp์์
<div class="d-none d-md-block">
<ul class="pagination justify-content-center">
<!-- ์ด์ ํ์ด์ง -->
<c:choose>
<c:when test="${pageBean.prevPage <= 0 }">
<li class="page-item disabled"><a href="#"
class="page-link">์ด์ </a></li>
</c:when>
<c:otherwise>
<li class="page-item"><a
href="${root}/board/main?info_idx=${info_idx}&page=${pageBean.prevPage}"
class="page-link">์ด์ </a></li>
</c:otherwise>
</c:choose>
<!-- ์ค๊ฐ ํ์ด์ง ๋ฒํธ๋ค -->
<c:forEach var="idx" begin="${pageBean.min}"
end="${pageBean.max}">
<c:choose>
<c:when test="${idx == pageBean.currentPage}">
<li class="page-item active"><a
href="${root}/board/main?info_idx=${info_idx}&page=${idx}"
class="page-link">${idx}</a></li>
</c:when>
<c:otherwise>
<li class="page-item"><a
href="${root}/board/main?info_idx=${info_idx}&page=${idx}"
class="page-link">${idx}</a></li>
</c:otherwise>
</c:choose>
</c:forEach>
<!-- ๋ค์ ํ์ด์ง -->
<c:choose>
<c:when test="${pageBean.min >= pageBean.pageCnt}">
<li class="page-item disabled"><a href="#"
class="page-link">๋ค์</a></li>
</c:when>
<c:otherwise>
<li class="page-item"><a
href="${root}/board/main?info_idx=${info_idx}&page=${pageBean.nextPage}"
class="page-link">๋ค์</a></li>
</c:otherwise>
</c:choose>
</ul>
</div>
ํ ์คํธํ๊ธฐ


๊ธ์ ์ฝ๊ณ ๋ค์ ๊ทธ ํ์ด์ง๋ก ์ด๋ํ๊ธฐ
2ํ์ด์ง์์ ๊ฒ์๊ธ์ ์ฝ๊ณ ๋ค์ ๋ชฉ๋ก์ผ๋ก ๋๋ฅด๋ฉด ํด๋น ํ์ด์ง๋ก ๋์๊ฐ๊ธฐ


boardController์์ page ์ ๋ณด ๋ชจ๋ธ์ ๋ด๊ธฐ
//ํ์ด์ง๋ค์ด์
์ถ๊ฐ
@GetMapping("/main")
public String main(@RequestParam("info_idx") int info_idx,
Model model , @RequestParam(value = "page",defaultValue = "1")int page) {
model.addAttribute("info_idx", info_idx);
model.addAttribute("boardName",boardService.getBoardName(info_idx));
model.addAttribute("list", boardService.getContentList(info_idx,page));
//ํ์ด์ง๋ค์ด์
๊ณ์ฐ
PageBean pageBean = boardService.getContentCnt(info_idx, page);
model.addAttribute("pageBean", pageBean);
model.addAttribute("page", page);
return "board/main";
}
main.jsp ์ ๋ชฉ ๋งํฌ ์์
<td><a href="${root }/board/read?info_idx=${info_idx}&page=${page}&board_idx=${obj.board_idx}">${obj.title}</a></td>
boardController- read์์๋ page ์ ๋ณด ๋ชจ๋ธ์ ๋ด๊ธฐ
@GetMapping("/read")
public String read(@RequestParam("info_idx") int info_idx,
@RequestParam("board_idx") int board_idx,
@RequestParam(value = "page",defaultValue = "1")int page,
Model model) {
model.addAttribute("info_idx", info_idx);//๊ฒ์ํ ๋ฒํธ๋ ์ ์ง
//๊ธ๋ฒํธ๋ก db์์ ๊ฒ์๊ธ ์ฝ์ด์ค๊ธฐ
model.addAttribute("content", boardService.getContentDetail(board_idx));
model.addAttribute("sessionUser",sessionUser); //๋ก๊ทธ์ธ ๋ ์ ์ ์ ๋ณด
model.addAttribute("page", page);
return "board/read";
}
read.jsp
<div class="form-group">
<div class="text-right">
<a href="${root}/board/main?info_idx=${info_idx}&page=${page}" class="btn btn-primary">๋ชฉ๋ก๋ณด๊ธฐ</a>
<c:if test="${sessionUser.user_idx == content.writer_idx}">
<a href="${root}/board/modify?info_idx=${info_idx}&board_idx=${content.board_idx}&page=${page}" class="btn btn-info">์์ ํ๊ธฐ</a>
<a href="${root}/board/delete?info_idx=${info_idx}&board_idx=${content.board_idx}" class="btn btn-danger">์ญ์ ํ๊ธฐ</a>
</c:if>
</div>
</div>
ํ ์คํธํ๊ธฐ
์๊น์ ๋์ผํ๊ฒ 2ํ์ด์ง์ ์๋ ๊ฒ์๊ธ ์์ธ๋ณด๊ธฐ ๋๋ฅด๊ณ ๋ค์ ๋ชฉ๋ก์ผ๋ก ์ด๋


2ํ์ด์ง๋ก ๋์์ด
๊ทธ๋ฆฌ๊ณ ์์ ํ์ด์ง๋ก ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์์ ํ๋ค.
BoardController
//๊ฒ์๊ธ ์์
@GetMapping("/modify")
public String modify(@RequestParam("info_idx") int info_idx,
@RequestParam("board_idx") int board_idx,
@RequestParam("page") int page,
Model model,
@ModelAttribute("modifyContent") BoardVO modifyContent) {
modifyContent.setInfo_idx(info_idx);
modifyContent.setBoard_idx(board_idx);
boardService.getContents(modifyContent); // ์์ ์ ์ ๋ณด๋ฅผ db์์ ๊ฐ์ ธ์จ๋ค
model.addAttribute("modifyContent", modifyContent); //์์ ํ์ด์ง๋ก ์ ๋ฌ
model.addAttribute("info_idx", info_idx); //๊ฒ์ํ๋ฒํธ ์ ๋ฌ
model.addAttribute("page", page);
return "board/modify";
}
modify.jsp - ์ทจ์๋ฒํผ์ page ์ ๋ณด ์ถ๊ฐ ๋ฐ form action์๋ ์ถ๊ฐ
<form:form action='${root}/board/modify_pro?page=${page}'
<a href="${root }/board/read?info_idx=${info_idx}&board_idx=${modifyContent.board_idx}&page=${page}"
class="btn btn-info">์ทจ์</a>
BoardController- modify_pro์์
//๊ฒ์๊ธ ์์ ์ฒ๋ฆฌ
@PostMapping("/modify_pro")
public String modify_pro(@Valid @ModelAttribute("modifyContent") BoardVO modifyContent,
@RequestParam("page") int page,
BindingResult result,Model model) {
model.addAttribute("page", page);
if(result.hasErrors()) {
return "board/modify";
}
//๋ฐ์ดํฐ ์์ ํ๊ธฐ
boardService.modifyContent(modifyContent);
model.addAttribute("info_idx",modifyContent.getInfo_idx());
model.addAttribute("board_idx",modifyContent.getBoard_idx());
return "board/modify_success";
}
modify_success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="root" value="${pageContext.request.contextPath}" />
<script>
alert('์์ ๋์์ต๋๋ค')
location.href = "${root}/board/read?info_idx=${info_idx}&board_idx=${board_idx}&page=${page}"
</script>
'BACKEND > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ๊ธฐ๋ณธํ์ด์ง(index) (0) | 2023.11.03 |
|---|---|
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ๊ฒ์๊ธ ์ญ์ ์ฒ๋ฆฌ (1) | 2023.11.03 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ๊ฒ์๊ธ ์์ ์ฒ๋ฆฌ (0) | 2023.11.02 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ์ด๋ฏธ์ง ์ ๋ก๋ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ (0) | 2023.11.02 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ๊ฒ์๊ธ์ ๊ธ์ด์ด๋ง ์์ ๊ฐ๋ฅํ๊ฒ (0) | 2023.11.02 |