게시판 페이지네이션

JEONG SUJIN·2022년 12월 30일
0

PageBean.java

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

BoardMapper.java

@Select("select count(*) from content_table where content_board_idx = #{content_board_idx}")
	int getContentCnt(int content_board_idx);

BoardService.java

	//페이징처리
	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(게시판번호,현재페이지) 메서드 사용하면 선택한 게시판의 현재페이지에 해당하는 페이지네이션 객체가 리턴된다.

BoardController.java

@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);
        
}

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?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>
          <!-- 페이징처리 -->
         

profile
기록하기

0개의 댓글