[JSP] Paging 처리 (Myutil)
by mini_min[JSP] Paging 처리 (Myutil)
✔️ 전체 페이지 수 구하기
//전체 페이지 수
public int pageCount(int dataCount, int size) {
if(dataCount <= 0) {
return 0;
}
return dataCount/size + (dataCount % size > 0 ? 1 : 0);
}
✔️ GET 방식으로 페이징 처리하기
👩💻 여러 문자열을 더할 것이기 때문에, StringBuilder 객체를 만들어준다.
1) 파라미터 : current_page / total_page / list_url (링크 설정할 주소)
RETURN : 페이징 결과 (sb.toString();)
public String paging(int current_page, int total_page, String list_url) {
StringBuilder sb = new StringBuilder();
//중략
}
2) 한 페이지에 나올 데이터 수 : 10개
currentPageSetup; (데이터가 표시될 페이지의 범위에서 첫 번째 페이지 -1)
int numPerBlock = 10; //한줄에 나올 데이터 수
int currentPageSetup;
int n, page;
3) current_page 는 현재 보일 페이지이다.
만약, 현재 보일 페이지가 1보다 적거나, 전체 페이지 수를 넘어서면 RETURN ""
//current_page : 현재 보이는 페이지
if(current_page < 1 || total_page < current_page ) {
return "";
}
4) GET 방식으로 페이징 처리하려면, <주소?이름1=값1&이름2=값2> 형식이기 때문에 list_url 에서 ?가 이미 있으면 &를 붙인다.
//주소 물음표 있으면 & 붙이기
if(list_url.indexOf("?") != -1) {
list_url += "&";
} else {
list_url += "?";
}
5) currentPageSetup 는 표시를 시작할 페이지 -1
만약, 현재 페이지가 47이면 : 47/10 = 4 * 10 해서 currentPageSetup 은 40이 나온다.
//currentPageSetup : 표시를 시작할 페이지 -1
currentPageSetup = (current_page / numPerBlock) * numPerBlock;
//나눠 떨어질 경우
if( current_page % numPerBlock == 0) {
currentPageSetup = currentPageSetup - numPerBlock;
}
6) 처음페이지, 이전 태그 만들기 (10페이지 전)
: 전체 페이지수보다 데이터 수가 적고, 현재페이지셋업이 0보다 크면, (첫 페이지가 아니면) 처음과 이전 태그가 만들어지도록 한다.
(첫 페이지에서는 '이전' 버튼이 없어야함)
💡 if 현재 페이지가 34페이지일 때,
n 은 34 - 10 = 24.
이전 페이지를 누르면 10만큼 뒷페이지로 넘어가서 24페이지가 열린다.
sb.append("<div class='paginate'>");
//처음페이지, 이전(10페이지 전)
n = current_page - numPerBlock;
// 1) 전체 페이지가 10장을 넘어야한다. 1장인데 이전 버튼 있으면 안된다.
// 2) currentPageSetup 이 10 은 되어야함 (1~10 페이지만 있을 때 이전 버튼 안된다.)
if(total_page > numPerBlock && currentPageSetup > 0) {
sb.append("<a href='" + list_url + "page=1'>처음</a>");
sb.append("<a href='" + list_url + "page=" + n + "'>이전</a>");
}
7) 페이징 처리 ⭐⭐
: 페이지는 현재페이지셋업에서 +1 부터 찍히도록 한다.
: 전체 페이지수를 넘어가지 않고 현재페이지셋업+한 페이지 출력 데이터 수를 넘어서지 않는 수일때 while 돌린다.
: 만약 페이지와 현재 페이지가 같으면 <span> 태그로 내용 출력
: 그게 아니라면 한 페이지씩 찍는다.
page = currentPageSetup + 1; //30이면 31부터 찍히도록 하는것
while(page <= total_page && page <= (currentPageSetup+numPerBlock)) {
if(page == current_page) {
sb.append("<span>" + page + "</span>");
} else {
sb.append("<a href='" + list_url + "page=" + page + "'>" + page + "</a>");
}
page++;
}
8) 다음(10페이지 후), 마지막 페이지
: 10 페이지씩 넘어가기 (현재 페이지 + 10개)
n = current_page + numPerBlock; //페이지 오바해서 넘어가면 안되니까 아래 if조건
if(n > total_page ) n = total_page;
// 97 - 80 = 17 > 10 일때도 생김.
// but, 97-90 = 7 > 10 안생김 (마지막 페이지)
if(total_page - currentPageSetup > numPerBlock) {
sb.append("<a href='" + list_url + "page=" + n + "'>다음</a>");
sb.append("<a href='" + list_url + "page=" + total_page + "'>끝</a>");
}
sb.append("</div>");
return sb.toString();
✔️ jsp - list
- 처음 페이지는 무조건 1
- 이후 클라이언트가 요청하는 값 (pageNum) 이 있으면 현재 페이지가 변경된다.
- 현재 페이지는 전체 페이지 수를 넘지 못한다.
<%@page import="com.util.Myutil"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@page trimDirectiveWhitespaces="true" %>
<%
request.setCharacterEncoding("utf-8");
// 파라미터로 넘어온 페이지 번호(JSP 에서 PAGE 는 예약어로 변수명으로 사용 불가)
String pageNum = request.getParameter("page");
int current_page = 1;
Myutil util = new Myutil();
//파라미터가 존재하면
if(pageNum != null){
current_page = Integer.parseInt(pageNum);
}
int dataCount = 965;
int size = 10;
int total_page = util.pageCount(dataCount, size);
if(current_page > total_page) {
current_page = total_page;
}
//페이징 처리
String listUrl = "list.jsp";
String paging = util.paging(current_page, total_page, listUrl);
%>
'JSP' 카테고리의 다른 글
[JSP] EL 태그 정의 / EL 사용 이유 / 내장객체 / 연산 (0) | 2022.10.04 |
---|---|
[JSP] Paging 가운데 정렬 (구글 페이지네이션) (0) | 2022.10.03 |
[JSP] DB Connection (0) | 2022.10.03 |
[JSP] Paging 처리 방법 (0) | 2022.10.03 |
[JSP] Calendar 달력 - 일정표 (0) | 2022.10.03 |
블로그의 정보
개발자 미니민의 개발로그
mini_min