package com.demo.beans;
public class PageBean {
//최소 페이지 번호
private int min;
//최대 페이지 번호
private int max;
//이전 버톤의 페이지 번호
private int prevPage;
//다음 버튼의 페이지 번호
private int nextPage;
//전체 페이지
private int pageCnt;
//현재 페이지 번호
private int currentPage;
//get()메서드
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;
}
//생성자에서 계산으로설정
//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;
}
}
}
@Select("select count(*) from content_table where content_board_idx = #{content_board_idx}")
int getContentCnt(int content_board_idx);
//페이징처리
public PageBean getContentCnt(int content_board_idx, int currentPage) {
int content_cnt = boardMapper.getContentCnt(content_board_idx);
PageBean pageBean = new PageBean(content_cnt, currentPage,page_listcnt, page_paginationcnt);
return pageBean;
}
이제 BoardService.getContentCnt(게시판번호,현재페이지) 메서드 사용하면 선택한 게시판의 현재페이지에 해당하는 페이지네이션 객체가 리턴된다.
@GetMapping("/main")
public String main(@RequestParam("board_info_idx") int board_info_idx, Model model,@RequestParam(value = "page", defaultValue = "1") int page) {
//생략...
PageBean pageBean = boardService.getContentCnt(board_info_idx, page);
model.addAttribute("pageBean", pageBean);
}
<!-- 페이징처리 -->
<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?board_info_idx=${board_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?board_info_idx=${board_info_idx}&page=${idx}" class="page-link">${idx }</a>
</li>
</c:when>
<c:otherwise>
<li class="page-item">
<a href="${root }board/main?board_info_idx=${board_info_idx}&page=${idx}" class="page-link">${idx }</a>
</li>
</c:otherwise>
</c:choose>
</c:forEach>
<c:choose>
<c:when test="${pageBean.max >= 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?board_info_idx=${board_info_idx}&page=${pageBean.nextPage}"
class="page-link">다음</a>
</li>
</c:otherwise>
</c:choose>
</ul>
</div>
<!-- 페이징처리 -->