[Java] 게시판 페이징 구현
이제 슬슬 웹에 대해서 배운다.
- jsp, servlet, 세션, 쿠키 등등 이제 드디어 웹개발을 배우기 시작했다.
- 아직도 웹이라는 것에 대해서 잘 알지는 못하지만 그래도 하나하나 알아가기 시작했고
- 지금 작성하는 이 .md파일이 markdown의 약자라는 것과 내가 사용하는 jekyll & Minimal Mistakes 테마의 구성이 어떻게 되어있는지 조금씩 알게 되기 시작했다.
문제는 게시판이야!
- 구글링하다보면 게시판 만들기라는 내용이 많이 나온다. 그만큼 웹이라는 것의 첫걸음이라는 생각이 든다.
- 학원에서 배우다보면 열심히 코드를 따라치는 나를 발견하게 된다. 물론 전부 이해하면 좋겠지만 어느 순간 정신차리면 코더가 된 나를 발견해서 슬프다.
- 당장! 나보고 게시판을 만들라고 하면 힘들겠지만 하나하나 연습하다보면 만들 수 있을거라는 생각에 공부하고 있다.
페이징을 배워보자!
- jsp를 배우면서 게시판을 만들게 되었다. 일단 코드를 쭈~욱 따라치면서 배워나갔다.
- 여러가지를 배우지만 그 중에서도 내가 꼭 혼자 힘으로 해야겠다는 생각이 들었던 게 페이징이다.
- 엄청나게 어려운 알고리즘이 아니기 때문에 내 방식대로 만들어보자고 해서 한번 만들어봤다.
배웠던 페이징
- 학원에서 알려준 페이징 방식은 이런 것이었다. 한번에 보여줄 페이지의 크기를 구하고 (사진은 5개) 이전과 다음 버튼을 구현한 아주 기본적이고 효율적인 디자인이었다.
만들어보고 싶었던 페이징
- 위에서 배운 페이징도 좋지만 그걸 배우고 나니, 내가 생각했던 것을 만들고 싶어졌다. 그래서 만들어봤다.
5개씩 페이징
1페이지 -> 1부터 5까지 보여야하고
7페이지 -> 5부터 9까지 보여야하고
9페이지 -> 5부터 9까지 보여야하고
총 페이지가 3개일때는 3개만 보여야 된다.
느낀점
- 며칠전에 배운거라서 학원에서 혼자 만들어보려고 했다가 주먹구구식으로 코드 짜는 나를 발견하고
1 2
//나도 내가 어떤 공식이나 수학을 쓰고 있는지 모르겠다... //이런건 하지말자. 뭔가 틀에 끼어맞추지 말고 틀에 딱 맞는 답을 만들거나 찾아서 넣자.
- 이렇게 주석달고 접었다. 물론 다시 해봐야지라는 생각은 했었지만.
구현코드
- 페이징 전체 부분은 아니고 그냥 일부분이다. 더 완벽하게 이해하려면 전체 부분을 한번 더 구현해봐야겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public String pageIndexList(int currentPage, int totalPage, String listUrl) {
int numPerBlock = 5;
int startPage = 0;
int endPage = 0;
StringBuffer sb = new StringBuffer();
if (currentPage == 0 || totalPage == 0) {
return "";
}
if (listUrl.indexOf("?") != -1) {
listUrl = listUrl + "&";
} else {
listUrl = listUrl + "?";
}
startPage = currentPage - (numPerBlock / 2);
endPage = (numPerBlock&1) == 1 ? (currentPage + (numPerBlock / 2)) : ((currentPage + (numPerBlock / 2)) - 1) ;
if(numPerBlock / 2 + 1 > currentPage) {
endPage += ((numPerBlock / 2 + 1) - currentPage);
}
if(totalPage - endPage < 0) {
startPage += (totalPage - endPage);
}
if (startPage < 1) {
startPage = 1;
}
if (endPage > totalPage) {
endPage = totalPage;
}
for (int page = startPage; page <= endPage; page++) {
if (page == currentPage) {
sb.append("<font color=\"Fuchsia\">" + page + "</font> ");
} else {
sb.append("<a href = \"" + listUrl + "pageNum=" + page + "\">" + page + "</a> ");
}
}
return sb.toString();
}
나중에 볼 주석
Leave a comment