이렇게 게시물이 올라가있는 게시판이 있고 이것들을 페이징처리를 하는 방법이다. 현재 가지고 있는 정보는 1. 한 페이지에 나오는 게시물 번호수 (ex 페이지 당 10개의 게시물) 2. 총 번호수 (총 게시물 수) 3. 현재 내가 선택한 페이지 (내가 보겠다고 선택한 임의의 8 페이지) 4. 총 페이지 수 (총 게시물 수가 60개고 10개씩 보여준다고 하면 10페이지) 5. 해당페이지를 누르면 이동할 페이지 url 총 두 개의 메소드로 구성이 되어 있는 데 첫 번째 메소드는 총 몇 페이지로 이루어져 있는지 계산하는 메소드이고 두 번째 메소드는 페이지를 jsp 페이지에서 출력할 수 있도록 만들어줄 문자열을 만들어 반환한다.
메소드1에서는 총 게시물 수와 페이지 당 표시할 게시물 수를 받아서 총 몇 페이지가 필요한 지 보여주는데 만약 게시물이 234 개 있고 페이지 당 10개 씩 보여준다면 23 +1 = 24 장의 페이지가 필요할 것이다. 만약 10으로 나누어 떨어지는 수만큼 게시물이 있다면 딱 몫만큼만 페이지가 필요할 것이다. (예를 들어 230개라면 페이지는 딱 230/10 의 몫인 23장이 필요하다)
두 번째 메소드는 페이지를 jsp 페이지에서 출력할 수 있도록 만들어줄 문자열을 만들어 반환한다. int 로 선언된 변수들은 지금 당장은 감이 잡히지 않을테니 밑에서 설명할 것이다. 다음페이지로 넘겨줄 url 다음에 페이지 번호를 넣어주기 위한 전처리를 해준다. 만약에 ? 가 있으면 & 를 붙여주고 ?가 없으면 ?를 붙여준다.
currentpageSetup 은 1 부터 10 은 0 11 부터 20은 10 21 부터 30 은 20 ... 이런 식으로 설정되어야 한다. 즉 현재내가 선택한 페이지를 식에 넣어 계산한 값이 0 이라면 페이지를 1부터 10까지 보여주고 10 이라면 11 부터 20까지 보여주겠다는 뜻이다. 그런데 마지막 번호를 살펴보면 식으로부터 20 / 10 * 10 은 20 이다. ( 10 이 되어야하는데 20 이다.) 그래서 현재 선택한 페이지가 10의 배수이면 10만큼 빼주도록 한것이다.
처음으로 가는 버튼을 만드는 과정이다. 만약 1. 총 페이지 수가 한 페이지에 들어가는 페이지보다 크다면 ( 지금 10장씩 보여주는데 만약에 페이지가 5장밖에 없다면 처음으로 버튼을 만드는 것이 되게 웃겨진다.) 2. 그리고 currentPageSetup 이 0 이상이라면( 즉, 내가 11 페이지를 선택했다면 처음으로 버튼이 필요하지만 1하고 10 사이의 페이지를 선택했다면 처음으로 버튼이 필요가 없다. 그냥 1 누르면 된다.) 처음으로 이동할 수 있는 링크<a> 태그를 만들어준다.
이번에는 이전페이지로 버튼을 만들어줄것이다. n 은 현재 선택한 페이지에서 -10 만큼 뒤로 이동시켜주기 위한 것이다. (내가 지금 14페이지 인데 이전버튼을 누르면 4페이지로 이동한다.) 이 것도 조건 1. 전체페이지가 10장을 넘어야하며(페이지가 1장뿐인데 이전페이지로 버튼이 있으면 안되니까) 조건 2. 현재 페이지가 최소 11페이지 이상이어야 한다. 여기서 코드 문자열에 빈공간이 들어가면 이렇게 잘못된 값이 전달되므로 주의!
이제부터는 본격적으로 페이지 번호들을 출력해줄 것이다. 만약 내가 현재 45 페이지를 선택한 상태라면 45페이지의 currentPageSetup 은 40 이며 아래에는 41페이지부터 50 페이지까지 찍어줘야 한다. page 라는 변수는 0 , 10, 20 이런데 페이지를 찍어주려면 시작을 1,11,21, 이렇게 시작을 해야하므로 +1 을 해줬다,
while 문을 통해 page 를 하나씩 증가시켜가며 페이지 번호를 찍을 것인데 조건식을 살펴보면 .. 예시를 통해서 살펴보는 것이 좋겠다. (page<=totalPage) → 현재 찍는 페이지가 총 페이지보다 같거나 작을 때까지만 찍는다 내가 지금 41부터 50까지의 구간을 찍으려고 한다. 45 페이지를 찍는데 마지막 페이지가 45페이지 까지면 거기까지만 찍는다. (page<=currentPageSetup + numPerBlock) → 현재 내가 41페이지부터 50페이지까지의 구간을 찍으려 한다. (즉. currentPageSetup 은 40 이다. ) 그러면 41부터 시작해서 50 까지만 찍어야한다. 그 이상으로 넘어가면 안된다. 만약에 현재 찍고 있는 페이지가 내가 현재 선택한 페이지번호와 같다면 주황색 굵은 글씨 처리를 해준다. 요롷게 말이다이제 두 가지 처리만 남았다 다음페이지 버튼과 마지막 페이지로 가는 버튼이다!
다음 페이지는 이전페이지와 마찬가지로 만약에 내가 11 페이지에서 이전페이지로 가고싶다면 11-10 =1 페이지로 이동 했다면 다음 페이지는 11 + 10 = 20 페이지로 이동해야 한다. 조건문에서는 다음페이지가 존재해야만 다음페이지 버튼이 생성되도록 해준 것이다, 총 64페이지인데 내가 현재 60페이지라면 다음페이지가 필요하지만 64페이지라면 다음 페이지가 필요없다.
마지막으로 마지막페이지 버튼이다. 조건1. 우선 10페이지는 넘어야하고, (5페이지가 총 페이지라면 다음페이지 버튼은 필요없을것) 조건2. 총 64페이지일 때는 60페이지까지만 마지막페이지 버튼이 만들어지도록 한다. (64페이지가 마지막인데 61,62,63,64페이지를 선택했을 때는 마지막페이가 필요가 없다) 맨 처음 선언해뒀던 StringBuffer 에 코드를 타고 쭉 내려오면서 필요한 문자열들을 append 했고 메소드는 최종StringBugger.toString() 한 결과를 return 하고 마무리된다. |