Spring 페이징처리

최주영·2023년 7월 17일
0

spring

목록 보기
8/12
  1. 클래스 하나 만들어서, 메소드 하나 생성
  • 페이징 처리되는 것을 문자열로 만들어줌
// PageFactory
package com.bs.spring.common;

public class PageFactory {
	
	public static String getPage(int cPage, int numPerpage, int totalData, String url) {
		
		// 매개변수값을 이용해서 pageBar 만들어주는 함수
		StringBuffer pageBar= new StringBuffer();
		
		int totalPage=(int)(Math.ceil((double)totalData/numPerpage));
		int pageBarSize=5;
		
		int pageNo = ((cPage-1)/pageBarSize)*pageBarSize+1;
		int pageEnd = pageNo+pageBarSize-1;
		
		pageBar.append("<ul class='pagination justify-content-center pagination-sm'>");
		
		if(pageNo==1) {
			pageBar.append("<li class='page-item disabled'>");
			pageBar.append("<a class='page-link' href='#'>이전");
			pageBar.append("</a>");
			pageBar.append("</li>");
		}else {
			pageBar.append("<li class='page-item'>");
			pageBar.append("<a class='page-link' href='javascript:fn_paging("+(pageNo-1)+")'>이전");
			pageBar.append("</a>");
			pageBar.append("</li>");
		}
		
		while(!(pageNo>pageEnd || pageNo>totalPage)) {
			if(pageNo==cPage) {
				pageBar.append("<li class='page-item disabled'>");
				pageBar.append("<a class='page-link' href='#'>"+pageNo);
				pageBar.append("</a>");
				pageBar.append("</li>");
			}else {
				pageBar.append("<li class='page-item'>");
				pageBar.append("<a class='page-link' href='javascript:fn_paging("+(pageNo)+")'>"+pageNo);
				pageBar.append("</a>");
				pageBar.append("</li>");
			}
			pageNo++;
		}
		
		
		if(pageNo>totalPage) {
			pageBar.append("<li class='page-item disabled'>");
			pageBar.append("<a class='page-link' href='#'>다음");
			pageBar.append("</a>");
			pageBar.append("</li>");
		}else {
			pageBar.append("<li class='page-item'>");
			pageBar.append("<a class='page-link' href='javascript:fn_paging("+(pageNo)+")'>다음");
			pageBar.append("</a>");
			pageBar.append("</li>");
		}
		pageBar.append("</ul>");
		
		//스크립트문 추가
		pageBar.append("<script>");
		pageBar.append("function fn_paging(no){");
		pageBar.append("location.assign('"+url+"?cPage='+no+'&numPerpage="+numPerpage+"');");
		pageBar.append("}");
		pageBar.append("</script>");
		
		return new String(pageBar);
		
	}
}

  1. 컨트롤러 에서 페이징 처리 메소드 불러오기
	@RequestMapping("/board/selectBoardAll.do")
	public String boardList(@RequestParam(value="cPage",defaultValue = "1") int cPage
			, @RequestParam(value="numPerpage",defaultValue = "5") int numPerPage, Model m) {
		// 페이지에 맞는 데이터를 가져와야함
		
		
		List<Board> boards = service.selectBoardList(Map.of("cPage",cPage,"numPerpage",numPerPage));
		int totalData = service.selectBoardCount();
		
		// 페이징처리
		
		m.addAttribute("pageBar",PageFactory.getPage(cPage, numPerPage, totalData,"selectBoardAll.do"));
		m.addAttribute("boards",boards);
		m.addAttribute("totalData",totalData);
        
		return "board/boardList";
	}

  1. 서비스 처리
	@Override
	public List<Board> selectBoardList(Map<String, Object> param) {
		return dao.selectBoardList(session,param);
	}
    
    @Override
	public int selectBoardCount() {
		return dao.selectBoardCount(session);
	}

  1. dao 처리
	@Override
	public List<Board> selectBoardList(SqlSession session, Map<String, Object> param) {
		int cPage=(int)param.get("cPage");
		int numPerpage=(int)param.get("numPerpage");
		RowBounds rb = new RowBounds((cPage-1)*numPerpage,numPerpage);
		return session.selectList("board.selectBoardList",null,rb);
	}
    
    @Override
	public int selectBoardCount(SqlSession session) {
		return session.selectOne("board.selectBoardCount");
	}

  1. mapper
<mapper namespace="board">
  		<select id="selectBoardList" resultType="board">
			SELECT * FROM BOARD
		</select>
  
		<select id="selectBoardCount" resultType="_int">
			SELECT COUNT(*) FROM BOARD
		</select>
 </mapper>

  1. jsp 화면
<section id="board-container" class="container">
        <p>총 ${totalData }건의 게시물이 있습니다.</p>
        
        <table id="tbl-board" class="table table-striped table-hover">
            <tr>
                <th>번호</th>
                <th>제목</th>
                <th>작성자</th>
                <th>작성일</th>
                <th>첨부파일</th>
                <th>조회수</th>
            </tr>
            <c:if test="${not empty boards}">
            	<c:forEach var="b" items="${boards }">
            		<tr>
            			<td>${b.boardNo }</td>
            			<td><a href="${path}/board/detailBoard.do?boardNo=${b.boardNo}">${b.boardTitle}</a></td>
            			<td>${b.boardWriter }</td>
            			<td>${b.boardDate }</td>
            			<td></td>
            			<td>${b.boardReadCount }</td>            			
            		</tr>
            	</c:forEach>
            </c:if>
        </table> 
        <div id="pageBar">
        	<c:out value="${pageBar }" escapeXml="false"/> <!-- 문자열로 인식되지 않기 위해서 -->
        </div>
</section>
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

정말 좋은 글 감사합니다!

답글 달기