[MVC2 게시판] 4. 페이징(Paging)
2016. 11. 28. 17:13ㆍProgramming/JSP
<작동 순서>
1) memList.do 호출
page, totalCount(전체 게시물 수) 세팅
세팅과 동시에 paging()가 실행되며 prev,next,beginPage,endPage가 결정됨
2) dao.selectAllMember(page)
page에 맞춰 startNum, endNum(마지막 게시글번호)이 결정됨.
이것을 SQL에 넣어 startNum ~ endNum에 해당하는 게시글만 리스트에 저장
3) MemberList.jsp에 받아온 paging 객체 정보(page,begin,end,prev,next)를
<jsp:param>을 이용해 paging.jsp로 넘김
4) paging.jsp 구현
paging 객체 정보에 맞게 출력하는 페이지
<memList.do>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @WebServlet("/memList.do") public class MemberListController extends HttpServlet{ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { MemberDao dao = MemberDao.getInstance(); int page = 1; if(req.getParameter("page")!=null){ page = Integer.parseInt(req.getParameter("page")); } Paging paging = new Paging(); paging.setPage(page); paging.setTotalCount(44); List<Member> list = dao.selectAllMember(page); req.setAttribute("memList", list); req.setAttribute("paging", paging); RequestDispatcher dispatcher = req.getRequestDispatcher("./member/MemberList.jsp"); dispatcher.forward(req, resp); } } | cs |
<Paging 빈>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | public class Paging { private int page=1; //현재 페이지 private int totalCount; //전체 게시글수 private int beginPage; //출력 시작 private int endPage; //출력 끝 private int displayRow = 10; //한 페이지에 몇 개 row private int displayPage = 10; //한 페이지에 몇 개 페이지 boolean prev; //prev 버튼이 보일지/안 보일지 boolean next; //총 페이지 수가 10개 넘는 경우만 true public void setTotalCount(int totalCount) { //이걸 꼭 호출해야 paging이 가능하기 때문에 //이걸 호출하면 자동으로 paging() 함수 호출하도록 설정 this.totalCount = totalCount; paging(); } private void paging(){ //displayPage = 10(고정값) //prev,next,beginPage,endPage 를 계산해서 만든다. endPage = ((page+(displayPage-1))/displayPage)*displayPage; beginPage = endPage - (displayPage-1); //글이 32개라면 필요한 페이지는 4개 //32/10 = 3.2 올림해서 4 int totalPage = (int)Math.ceil(totalCount/(double)displayRow); if(totalPage<endPage){ endPage = totalPage; next=false; }else{ next=true; } prev=(beginPage == 1)?false:true } //나머지는 get/set 메소드는 생략 |
<MemberDao.멤버 리스트>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public List<Member> selectAllMember(int page){ //1번 페이지 1~10 //2번 페이지 11~20 int startNum = (page-1)*10+1; int endNum = page*10; System.out.println(startNum+"//"+endNum); String sql="SELECT * FROM (" + "SELECT * FROM (" + "SELECT ROWNUM row_num, MEMBER.* FROM " + "MEMBER ORDER BY NUM DESC" + ")PAGING_MEMBER WHERE row_num>=?" + ") WHERE row_num <=?"; List<Member> list = new ArrayList<Member>(); try { System.out.println("DB에 접근하였습니다"); conn = DBManager.getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setInt(1, startNum); pstmt.setInt(2, endNum); rs = pstmt.executeQuery(); | cs |
<MemberList.jsp>
1 2 3 4 5 6 7 | <jsp:include page="/paging/paging.jsp"> <jsp:param value="${paging.page}" name="page"/> <jsp:param value="${paging.beginPage}" name="begin"/> <jsp:param value="${paging.endPage}" name="end"/> <jsp:param value="${paging.prev}" name="prev"/> <jsp:param value="${paging.next}" name="next"/> </jsp:include> | cs |
<paging.jsp: 게시판 아래 페이지 번호 뷰>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!-- 1~10까지 있는 페이지의 페이징 --> <c:url var="action" value="/memList.do"/> <c:if test="${param.prev}"> <a href="${action}?page=1">prev</a> </c:if> <c:forEach begin="${param.begin}" end="${param.end}" step="1" var="index"> <c:choose> <c:when test="${param.page==index}"> ${index} </c:when> <c:otherwise> <a href="${action}?page=${index}">${index}</a> </c:otherwise> </c:choose> </c:forEach> <c:if test="${param.next}"> <a href="${action}?page=11">next</a> </c:if> | cs |
<조인+페이징 결합시 SQL문>
1 2 3 4 5 6 7 | SELECT * FROM (" //끝 페이지 + "SELECT * FROM (" //시작 페이지 + "SELECT ROWNUM row_num, P_B.* FROM (" //페이지 SELECT + "SELECT b.*, m.name from board b join member m on b.mem_num = m.num //출력할 내용 SELECT + ") P_B WHERE sort=?" + ")PAGING_BOARD WHERE row_num >= ? " + ") WHERE row_num <= ?"; | cs |
'Programming > JSP' 카테고리의 다른 글
[MVC2 게시판] 6. 접근 제한 걸기(Filter 이용) (0) | 2016.12.06 |
---|---|
[MVC2 게시판] 5. 파일 업로드 (0) | 2016.12.01 |
[MVC2 게시판] 3. 회원관리 (0) | 2016.11.25 |
[MVC2 게시판] 2. 로그인 (0) | 2016.11.25 |
[MVC2 게시판] 1. 개요 (0) | 2016.11.21 |