글 리스트 페이징 만들기 [ 다음 10 개 ]
앞전 포스트에서 숫자를 구현했다. 1 2 3 ~ 4 5...
그 앞뒤로 간단하게 몇 줄정도 추가하여
[ 이전 10 개 ] 와 [ 다음 10 개 ] 를 만들자.
우리가 구현했던 숫자부분이다
<%
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;
}
%>
<% }
} %>
간략하게..
토탈레코드가 있으면 10을 한도로 돌기시작해서 1부터 10까지 출력이 되는데
클릭시마다 나우블럭과 페이지 변수가 넘어가고 토탈페이지에 의해 포 문은 제어된다.
먼저 [ 이전 10 개 ] !!
<%
if(totalRecord !=0){
if(nowBlock > 0) {
%>
<a href="List.jsp?nowBlock=<%=nowBlock - 1 %>&page=<%=((nowBlock-1) * pagePerBlock)%> ">이전 <%=pagePerBlock%> 개</a>
<%
for(int i=0; i< pagePerBlock; i++) { %>
for 문과 if 문 사이에 넣어주자.
if(nowBlock > 0) {
나우블럭이 1개 이상 있어야 다음 10개가 실행되는데
한도치를 넘어서면 1이 증가하도록 나우블럭을 설계했었다.
<a href="List.jsp?nowBlock=<%=nowBlock - 1 %>&page=<%=((nowBlock-1) * pagePerBlock)%> ">이전 <%=pagePerBlock%> 개</a>
[ 이전 <%=pagePerBlock%> 개 ] 초기에 설정해놓은 10 들어가고
링크 클릭시 변수가 넘어가게 된다.
nowBlock = nowBlock -1
나우블럭은 -1로 넘어가서 1 2 3 ~ 9 10 숫자링크에 영향을 미친다.
나우블럭은 기본 0 이다. 이상태에서는 별 변화가 없겠지만
1 로 증가했을때 숫자링크들은 11 ~ 20 까지 보이게 되고 이전 열개를 클릭시
나우블럭에 -1 이 전해져 1 ~ 10 까지 보이게 된다.
page = (( nowBlock-1) * pagePerBlock)
nowBlock 이 1 일때 = 0 * 10 = 0
nowBlock 이 2 일때 = 1 * 10 = 10
nowBlock 이 3 일때 = 2 * 10 = 20
nowBlock 이 4 일때 = 3 * 10 = 30
page 는 nowPage 로 변하여 beginPerPage 에 영향을 주고 시작점이 변경된다.
beginPerPage = nowPage * numPerPage;
page 가 0 일때 = 0 * 10 = 0
page 가 10 일때 = 10 * 10 = 100
page 가 20 일때 = 20 * 10 = 200
page 가 30 일때 = 30 * 10 = 300
다음 10 개를 클릭시 100 번째 레코드가 보여지게 된다.
또 클릭시 200 번째 레코드가 보여지게 되는데 이전 10 개는 그 반대라는 의미
그럼 이전 10 개 완성되었다. 하지만 아직 페이지상에는 보이지 않는다.
[ 다음 10 개 ] 를 만들자.
<% if ((nowBlock * pagePerBlock) + i + 1 ==totalPage){
break;
}
}
%>
<% if (totalBlock > nowBlock + 1) { %>
<a href="List.jsp?nowBlock=<%=nowBlock + 1%>&page=<%=((nowBlock + 1) * pagePerBlock) %> ">다음 <%=pagePerBlock%> 개</a>
<% }
}
%>
위와 같은 위치에 [ 다음 10 개 ] 소스를 살찍 넣어주자.
<% if (totalBlock > nowBlock + 1) { %>
만일 토탈블럭 이 나우블럭에 1을 더한 값보다 크다면 실행하라.
토탈블럭 값을 구하자.
totalBlock=(int)Math.ceil((double)totalPage / pagePerBlock);
레코드가 15 개 있을때 2 / 10 = 1
totalPage = (totalRecord/numPerPage)
레코드가 99 개 있을때 10 / 10 = 1
레코드가 100 개 있을때 10 / 10 = 1
레코드가 101 개 있을때 11 / 10 = 2
레코드가 125 개 있을때 13 / 10 = 2
총 레코드가 101 가 넘어가는 순간부터 2 로 증가하므로
[ 다음 10 개 ] 가 나오는 if 문이 성립된다.
다음 <%=pagePerBlock%> 개 가운데에 10 이 찍히겠고
링크를 클릭하는 순간 변수를 넘기자.
nowBlock = nowBlock + 1
나우블럭은 +1로 넘어가서 1 2 3 ~ 9 10 숫자링크에 영향을 미친다.
나우블럭은 기본 0 이다. 이상태에서는 별 변화가 없겠지만
[ 다음 10 개 ]를 클릭시 나우블럭에 + 1 추가되어 11 ~ 20 이 보이게 된다.
page = (( nowBlock + 1) * pagePerBlock )
위와 마찬가지로
page 는 nowPage 로 변하여 beginPerPage 에 영향을 주고 시작점이 변경된다.
1을 넘겼을 경우 100 번째 레코드가 보이게 되고
2를 넘겼을 경우 200 번째 레코드가 보이면서
1~10 과 11 ~ 20 그리고 21 ~ 30 까지의 관계가 성립된다.
어려웠지만 쭈욱 늘어놓아보니 그다지 어렵지도 않다.
대충 리스트 페이지의 구색을 갖추었다.
멋진 디자인을 가미하여 나만의 게시판을 만들어 봅시다.
다음 포스트에서는 글 보기 페이지 연결을 알아보자.
완성 소스 !
--------------------------------------------------------------------------------
<%@ 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"));
}
totalBlock=(int)Math.ceil((double)totalPage / pagePerBlock);
%>
<html>
<head><title>JSPBoard</title>
</head>
<body topmargin=0>
<jsp:include page="../sub/top.jsp" flush="true">
<jsp:param name="title" value="제목" />
</jsp:include>
<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>
<td width=70>이 름</td>
<td width=50>조 회</td>
<td width=80>작성일</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>
<td>3.6</td>
</tr>
<%
}
%>
</table>
</td>
</tr>
<tr>
<td></td>
<td align=center>
<%
if(totalRecord !=0){
if(nowBlock > 0) {
%>
<a href="List.jsp?nowBlock=<%=nowBlock - 1 %>&page=<%=((nowBlock-1) * pagePerBlock)%> ">이전 <%=pagePerBlock%> 개</a>
<% }
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 (totalBlock > nowBlock + 1) { %>
<a href="List.jsp?nowBlock=<%=nowBlock + 1%>&page=<%=((nowBlock + 1) * pagePerBlock) %> ">다음 <%=pagePerBlock%> 개</a>
<% }
}
%>
</td>
</tr>
</table>
</body>
</html>
------------------------------------------------------------------------------
출처 : http://blog.daum.net/haha25/5386883
'공부방 > JSP' 카테고리의 다른 글
DB접속 후 일반적인 작업 패턴 (0) | 2013.01.28 |
---|---|
Oracle DAO (0) | 2013.01.28 |
글 리스트 페이징 만들기 [ 1 2 3 4 5 ] (0) | 2013.01.24 |
Page 이동 (0) | 2013.01.24 |
문자 자르기 (0) | 2013.01.22 |