[Java] 게시판 페이징 구현

Date:     Last Updated:

이제 슬슬 웹에 대해서 배운다.

  • jsp, servlet, 세션, 쿠키 등등 이제 드디어 웹개발을 배우기 시작했다.
  • 아직도 웹이라는 것에 대해서 잘 알지는 못하지만 그래도 하나하나 알아가기 시작했고
  • 지금 작성하는 이 .md파일이 markdown의 약자라는 것과 내가 사용하는 jekyll & Minimal Mistakes 테마의 구성이 어떻게 되어있는지 조금씩 알게 되기 시작했다.

문제는 게시판이야!

  • 구글링하다보면 게시판 만들기라는 내용이 많이 나온다. 그만큼 웹이라는 것의 첫걸음이라는 생각이 든다.
  • 학원에서 배우다보면 열심히 코드를 따라치는 나를 발견하게 된다. 물론 전부 이해하면 좋겠지만 어느 순간 정신차리면 코더가 된 나를 발견해서 슬프다.
  • 당장! 나보고 게시판을 만들라고 하면 힘들겠지만 하나하나 연습하다보면 만들 수 있을거라는 생각에 공부하고 있다.

페이징을 배워보자!

  • jsp를 배우면서 게시판을 만들게 되었다. 일단 코드를 쭈~욱 따라치면서 배워나갔다.
  • 여러가지를 배우지만 그 중에서도 내가 꼭 혼자 힘으로 해야겠다는 생각이 들었던 게 페이징이다.
  • 엄청나게 어려운 알고리즘이 아니기 때문에 내 방식대로 만들어보자고 해서 한번 만들어봤다.

배웠던 페이징

  • 학원에서 알려준 페이징 방식은 이런 것이었다. 한번에 보여줄 페이지의 크기를 구하고 (사진은 5개) 이전과 다음 버튼을 구현한 아주 기본적이고 효율적인 디자인이었다.

이전다음

만들어보고 싶었던 페이징

  • 위에서 배운 페이징도 좋지만 그걸 배우고 나니, 내가 생각했던 것을 만들고 싶어졌다. 그래서 만들어봤다.

5개씩 페이징

1페이지 -> 1부터 5까지 보여야하고

1

7페이지 -> 5부터 9까지 보여야하고

7

9페이지 -> 5부터 9까지 보여야하고

9

총 페이지가 3개일때는 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>&nbsp;");
			} else {
				sb.append("<a href = \"" + listUrl + "pageNum=" + page + "\">" + page + "</a>&nbsp;");
			}
		}
		return sb.toString();
	}

나중에 볼 주석


Leave a comment