본문 바로가기

공부방/JSP

글 리스트 페이징 만들기 [ 1 2 3 4 5 ]

글리스트 페이징 만들기 

이전 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