ABOUT ME

생활 코딩 이야기

Today
Yesterday
Total
  • 글 리스트 페이징 만들기 [ 1 2 3 4 5 ]
    공부방/JSP 2013. 1. 24. 17:54

    글리스트 페이징 만들기 

    이전 10개   1 , 2  ~  9 , 10   다음 10 개

     

     

     

    List.jsp 페이지가 무리없이 실행되었다면

    게시판의 부가기능을 달자

     

     

    리스트 페이징

     

    우선 이전과 다음은 나중으로 미루고 가운데 숫자부터 만들자.

     

     

     

     

     


    리스트 맨 아랫 부분에 한칸을 더 만들고

    ---------------------------------------------------------------------------

    <%

       if(totalRecord !=0){
      
         for(int i=0; i< pagePerBlock; i++) { %>
         
         <a href = "List.jsp?nowBlock=<%=nowBlock%>&page=<%=(nowBlock * pagePerBlock)+ i %>">


         <%=(nowBlock * pagePerBlock) + i + 1 %></a>

     

    <% if ((nowBlock * pagePerBlock) + i + 1 == totalPage){

              break;
           }
    %>

    <% 
       }
    }
    %>

    ----------------------------------------------------------------------------

    를 추가하자. 뭔가 복잡하지만 하나하나 풀어보면 쉽다.

     

     

    <%

        if(totalRecord !=0 ) {

     

    토탈레코드가 1개라도 있으면 for 문을 돌아라

     

     

          for(int i=0; i< pagePerBlock; i++) { %>

     

    i 값이 pagePerBlock 값 10 보다 작을때까지 돌아라 총 10 번

     

     

         <a href = "List.jsp?nowBlock=<%=nowBlock%>

     

         &page=<%=(nowBlock * pagePerBlock)+ i %>">

     

    1 2 3 .. , 각각의 숫자를 클릭시 List.jsp 페이지로 nowBlock 변수와 page 변수를 넘긴다.

     

                   (nowBlock  *  pagePerBlock ) + i

    첫번째      (     0          *         10          ) +    0  = 0

    두번째      (     0          *         10          ) +    1 = 1

    두번째      (     0          *         10          ) +    2  = 2

                                 .

    nowBlock = 0   과 page = 0 부터 9 까지 차례로 보내게 된다

     

     

         <%=(nowBlock * pagePerBlock) + i + 1 %></a>

     

    현재블럭 0  * 페이지 블럭의 한계 수 10  + i 에다가 올림 수 1 을 더해준다.

    위 구문으로 해서 1 2 3 4 5 6 7 8 9 10 이 생성되게 되는데 올림 수 1을 더해주지

    않는다면 0 1 2 3 4 5 6 7 8 9  로 표현이 될 것이다.

    그런데

    레코드는 총 12 개 작성되었으니 2 페이지 만 나와야 한다. 나머지 3~10 은 ?

     

     

    <% if ((nowBlock * pagePerBlock) + i + 1 ==totalPage){

              break;
           }
    %>

     

    for 문을 돌다가 (  ) 숫자가 토탈페이지와 동일하다면 브레이크 !

    레코드가 12개 였을때의 나머지 3 ~ 10 을 지워주는 기능이다.

     

     

    그럼 여기서.. totalPage 의 값을 구해보자.

     

     

     totalPage = (int)Math.ceil((double)totalRecord / numPerPage);

     

    토탈레코드를 최대페이지 숫자로 나누고 나머지는 수학함수.ceil 로 올림해버리자.

    이 구문은 beginPerPage 값 구하는 식 아래에다 적어주자.

     

     

    List 페이지를 구동해 보면

    하단에 살폿이  1 과 2 라는 숫자가 나온 것을 확인 할 수 있다.

    하지만 아무리 클릭해도 다음페이지로 넘어가는 변화가 없다.

    넘겼던 nowBlock 변수와 page 변수를 받아서 처리해 주면 비로소

    페이징이 살아서 제기능을 하게 된다.

     

     

     if (request.getParameter("page") != null) {
         nowPage = Integer.parseInt(request.getParameter("page"));

     

    페이지 받고

     


     if (request.getParameter("nowBlock") != null) {
         nowBlock = Integer.parseInt(request.getParameter("nowBlock"));

     

    나우블럭 받고 완료.

    위 소스의 위치는 맨아래 완벽 코드를 참조하길 바란다.

     

     

     

    다음 글들이 보이는 원리

     

     

    List.jsp 페이지를 돌리면 1  2 가 나오고 2 클릭시 다음 글들이 보인다.

    페이징 2 를 클릭시 페이지 변수 1 이 넘어가고

     

    beginPerPage = nowPage * numPerPage;

     

    위 수식에 따라 시작점 페이지의 숫자가 10으로 변한다

     

    beginPerPage는 글을 차례로 나오게 하는 for 문에 영향을 미치게 되고

     

      for (int i=beginPerPage; i<(beginPerPage+numPerPage); i++){
       if (i==totalRecord){break;}

        

                    ( i=10    i < (10+10); i  ++ )   가 되므로

     

       2 를 누른 순간부터 서버에서 가져온 파일들 중 10 번째 파일들부터 19번까지

       촤라락 펼쳐지게 되고  3 을 누르면 20 부터 29 까지 펼쳐지게 된다.

     

     

    페이징으로 10의 레코드만 보이게 조절 해 놓았으나

    이미 빈즈로 불러올 때 모든 레코드가 촤라락 펼쳐져 있는 상태라는 것...

     

     

    서로 물고 물리는 연결관계가 참 복잡하다. 헥헥

     

     

     

    다음 포스트에서는 이전 10 개와  다음 10 개를 만들자.

     

     

     

     

     

    완벽소스

    --------------------------------------------------------------------------------

    <%@ page contentType="text/html; charset=EUC-KR" %>
    <%@ page import="member.*,java.util.*"%>
    <jsp:useBean id="Bo" class="member.BoMgr"/>


    <%
      request.setCharacterEncoding("euc-kr");
    %>

    <%
       int totalRecord=0;
       int numPerPage=10;
       int pagePerBlock=10;
       int totalPage=0;
       int totalBlock=0;
       int nowPage=0;
       int nowBlock=0;
       int beginPerPage=0;
     
       Vector boList;

    %>


    <%

     boList = Bo.getBoList();

     totalRecord = boList.size();

     

     if (request.getParameter("page") != null) {
         nowPage = Integer.parseInt(request.getParameter("page"));
     }


     beginPerPage = nowPage * numPerPage;

     totalPage = (int)Math.ceil((double)totalRecord / numPerPage);


     if (request.getParameter("nowBlock") != null) {
         nowBlock = Integer.parseInt(request.getParameter("nowBlock"));
     }

     

    %>


    <html>
    <head><title>JSPBoard</title>
    </head>


    <body topmargin=0>

     

    <table align=center width="780" border=1 cellspacing=0 cellpadding=0>
     <tr>
      <td align=center height=50 colspan=2>JSP 강좌</td>
     </tr>
     <tr>
      <td width=180>dd</td>
      <td align=center valign=top height=350>
       <table border=1 width=600  cellpadding=0 cellspacing=0>
        <tr align=center bgcolor=#D0D0D0 height=0>
         <td width=50>번 호</td>
         <td width=350>제 목</td>
        </tr>


    <% 
      for (int i=beginPerPage; i<(beginPerPage+numPerPage); i++){
       if (i==totalRecord){break;}


    BoBean ListBo = (BoBean)boList.elementAt(i);

    String title = ListBo.getTitle();
    %>
        <tr>
         <td></td>
         <td><%=title%></td>
        </tr>


    <%
      }
    %>

       </table>
      </td>
     </tr>
     <tr>
      <td></td>
      <td align=center> Go to Page

    <%

       if(totalRecord !=0){
      
         for(int i=0; i< pagePerBlock; i++) { %>
         
         <a href = "List.jsp?nowBlock=<%=nowBlock%>&page=<%=(nowBlock * pagePerBlock)+ i %>">
         <%=(nowBlock * pagePerBlock) + i + 1 %></a>

    <% if ((nowBlock * pagePerBlock) + i + 1 ==totalPage){
              break;
           }
    %>

    <% 
       }
    }
    %>

      </td>
     </tr>
    </table>
    </body>
    </html>

    ----------------------------------------------------------------------------------


    출처 : http://blog.daum.net/haha25/5386883

    '공부방 > JSP' 카테고리의 다른 글

    Oracle DAO  (0) 2013.01.28
    글 리스트 페이징 만들기 [다음10개]  (0) 2013.01.24
    Page 이동  (0) 2013.01.24
    문자 자르기  (0) 2013.01.22
    문자 치환하기  (0) 2013.01.22
Designed by Tistory.