본문 바로가기
Java 및 JSP

[JSP] 게시판 페이징 처리

by jane.dev 2021. 8. 23.
반응형

2021.08.17 - [Java 및 JSP] - [JSP] DTO를 생성하면서 익히는 페이징 처리 과정

 

[JSP] DTO를 생성하면서 익히는 페이징 처리 과정

DTO(Data Transfer Object) 데이터를 오브젝트로 변환하는 객체로 VO는 DB에서 받아온 데이터를 그대로 전달한다면, DTO는 DB에서 받아온 데이터를 가공해서 전달 게시물 목록에서 페이징 처리를 하는 과

wheneveryouwantsz.tistory.com

 

BoardService 인터페이스를 구현한 BoardPagingService 작성

@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
    // page 파라미터에서 값을 전달 받음
    String strPage = request.getParameter("page");
    // page 파라미터에서 전달받을 값이 없을 경우에는 default 값으로 1을 설정
    int currentPage = 1;
    // page 파라미터에서 전달받을 값이 있을 경우에는 해당 값으로 페이지를 설정
    if(strPage != null){
        currentPage = Integer.parseInt(strPage);
    }
    BoardDAO dao = BoardDAO.getInstance();
    // boardList 리스트를 생성해서 DAO에서 10개씩 페이징된 리스트를 가져옴 
    List<BoardVO> boardList = dao.getPageList(currentPage);
    // DAO에서 전체 게시물 개수를 받아옴
    int total = dao.getBoardCount();
    // 이전에 작성한 pageDTO 객체를 생성해 위의 데이터들을 파라미터 값으로 작성
    BoardDTO pageDTO = new BoardDTO(total, currentPage, boardList);
    // 포워딩을 위한 request 객체 사용
    request.setAttribute("boardList", boardList);
    request.setAttribute("pageDTO", pageDTO);

 

JSP 파일 BoardList 아래 삽입될 페이지네이션

<!-- if문을 사용해서 게시물이 있는 경우에만 페이지네이션이 나타나도록 함 -->
<c:if test = "${pageDTO.hasBoard() }">
    <!-- 이전으로 가는 버튼, 시작 페이지가 11이상일 경우에만 나타나도록 함 -->
    <c:if test = "${pageDTO.startPage > 10 }">
        <a href = "/프로젝트명/매핑한주소?page=${pageDTO.startPage - 10 }">[이전 페이지]</a>
    </c:if>
    
    <!-- 페이지 번호 10개 나열 -->
    <c:forEach var = "pNo" begin = "${pageDTO.startPage }" end = "${pageDTO.endPage }">
        <a href = ""/프로젝트명/매핑한주소?page=${pNo }" >[${pNo }]</a>
    </c:forEach>
    
    <!-- 다음으로 가는 버튼, 마지막 페이지가 전체페이지보다 적을 경우에만 나타나도록 함 -->
    <c:if test = "${pageDTO.endPage < pageDTO.totalPages }">
        <a href = "/프로젝트명/매핑한주소?page=${pageDTO.startPage - 10 }">[다음 페이지]</a>
    </c:if>
</c:if>