글리스트 페이징 만들기
이전 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 |