2009년 12월 8일 화요일

[펌]JSP 페이징 기법

출처 지훈이네 블로그 | 프로프로
원문 http://blog.naver.com/sjh4052/60006610463

 

2004년 어느날 RANIEL에 의해 만들어짐...

raniel
BEANS Pageing v1.0

java.lang.Object | +-- raniel.Pageing


public class Pageing
extends Object

JAVA또는 JSP에서 페이징을 담당하는 BEANS입니다. 기본적으로 전체 페이지 수와 현재 볼 페이지만 정해준다면 7개의 get메소드를 통해 변수로 받아서 손쉽게 페이징을 처리할 수 있습니다. 예제파일을 보시면 손쉽게 사용할 수 있겠습니다.


설치방법...

저의 닉넴인 raniel package로 묶어 놨습니다...

일단 전 resin을 사용하니깐... c:\resin-3.0.8\doc\web-inf\classes\raniel\ 디렉토리로 Pageing.class 파일을 복사하시고

<%@ page contentType="text/html; Charset=EUC-KR" %>
<%@ page language="java" import="java.sql.*,java.util.*,java.text.*,raniel.*" %>

선언부에서 raniel.* 을 임포트 해주시면 됩니다... 설치완료~ ㅋㅋ


 

SETTER
setPageing (int listCount, int pageNo)
          int형의 listCount(게시물의 총갯수)와 int형의 pageNo(현재 가르키고자하는 페이지번호)를 set해준다
setPageing (int listCount, int pageNo, int pageSize, int pageingSize)
          오버로딩... 추가적으로 int형의 pageSize(한페이지에서 보여줄 리스트수)와 pageingSize(페이징번호의 갯수)를 set해준다
 
GETTER
 int getStart()
          게시물 리스트의 첫번째 시작번호를 반환합니다.
 int getEnd()
          게시물 리스트의 첫번째 마지막번호를 반환합니다.
 int getPageingStart()
          게시물 페이징번호의 시작번호를 반환합니다.
 int getPageingEnd()
          게시물 페이징번호의 시작번호를 반환합니다.
 int getPrevPageing()
          전페이지의 번호를 반환합니다. 없다면 0을 반환
 int getNextPageing()
          다음페이지의 번호를 반환합니다. 없다면 0을 반환
int getPageCount()
          전체의 페이지 수를 표시합니다. 70개의 게시물 페이지당 페이지당 10개씩 볼 경우엔 int 7을 반환
 
SETTER의 상세

public void setPageing(int listCount, int pageNo)

위의 setter를 이용할 경우엔 기본 리스트는 10개 기본 페이징은 5개가 됩니다.

 

  Pageing pg = new Pageing();   // Pageing 타입의 pg객체 생성

  pg.setPageing(100, 1)      // 총 100개의 게시물중에 1번째 테이블을 가르킨다...

 




public void setPageing(int listCount, int pageNo, int pageSize, int pageingSize)

위의 setter를 이용할 경우엔 기본 리스트와 기본 페이징도 추가적으로 정의할 수 있습니다.

  Pageing pg = new Pageing();   // Pageing 타입의 pg객체 생성

  pg.setPageing(100, 1, 20, 10)

  // 총 100개의 게시물중에 1번째 테이블을 가르킨다. 한페이지는 20개의 글이 뿌려질것이며 페이징은 10개씩 보여진다

 



 


GETTER의 상세

public int getStart()

  for문으로 리스트를 뿌려줄때 시작의 위치를 반환해줍니다.

 

  Pageing pg = new Pageing();   // Pageing 타입의 pg객체 생성

  pg.setPageing(100, 1)

 

  의 경우일땐 1을 반환


public int getStart()

  for문으로 리스트를 뿌려줄때 마지막의 위치를 반환해줍니다.

  pg.setPageing(100, 1)

 

  의 경우일땐 10을 반환


public int getPageingStart()

 

  for문으로 페이징번호를 뿌려줄때 시작의 위치를 반환

  pg.setPageing(100, 1) 의 경우일땐 1을 반환

 


public int getPageingEnd()

 

  for문으로 페이징번호를 뿌려줄때 마지막의 위치를 반환

  pg.setPageing(100, 1) 의 경우일땐 5를 반환

 


public int getPrevPageing()

 

  이전페이지의 번호를 반환합니다.

  pg.setPageing(100, 1) 의 경우일땐 0을반환

  전페이지가 없는경우이기때문에 0을 반환


public int getPrevPageing()

 

  다음페이지의 번호를 반환합니다.

  pg.setPageing(100, 1) 의 경우일땐 6을반환

 


public int getPageCount()

 

  현재 전체페이지의 수를 반환합니다.

  pg.setPageing(100, 1) 의 경우엔 10을 반환


소스예제입니다. (이 소스의 경우엔 select한 데이타베이스를 벡터에 담았을 경우입니다...)

벡터가 아닌경우엔 getStart,getEnd 메소드를 통해서 for문안에서 다른 조취를 취해주셔야겠지요...


// Pageing객체 생성
P
ageing pg = new Pageing();

// 첫번째 SETTER를 통해 GETTER호출... get을 하기위해선 받드신 setter의 두가지중 하나는 반드시실행
pg.setPageing(100, 1);   // pageNo는 현재페이지를 말합니다. 100개의 게시물중 한페이지에 10개의 게시물을 볼것(기본값) 이고 1페이지를 가르키는 상황완성...

// 아래의 변수들은 밑에 예제를...
int start = pg.getStart();
int end = pg.getEnd();
int pageingStart = pg.getPageingStart();
int pageingEnd = pg.getPageingEnd();
int prevPageing = pg.getPrevPageing();   // 전페이지가 없다면 0을 반환 있다면 해당되는 pageNo(페이지번호)를 반환
int nextPageing = pg.getNextPageing();   // 다음페이지가 없다면 0을 반환 있다면 해당되는 pageNo(페이지번호)를 반환
int pageCount = pg.getPageCount();

위의경우라면 start는 1을반환 end는 10을 반환 (for문을 돌면서 사용하시면 되겠죠?)

pageingStart는 1을반환 pageingEnd는 5를 반환 (여기역시 for문)

prevPageing은 지금 가르키는 페이지가 첫페이지그룹 이기때문에 당연 0을 반환하겠죠?

nextPageing은 다음페이지가 있기때문에 6을 반환하겠죠??

 

만약 위에서 pg.setPageing(100, 2, 5, 5) 라고 객체생성을 했다면

start는 6을 반환, end는 10을 반환

pageingStart는 현재 가르키는 페이지가 2니깐 첫번째 페이징 그룹에 속해있겠죠?? 한페이징을 5로 잡았으니깐... 역시 1을반환

pageingEnd는 5를 반환

prevPageing은 현재 가르키는 페이징이 1~5사이에 있기때문에 당연히 0을 반환하구

nextPageing는 당근 6을 반환합니다.

 

사용예제를 만들어 본다면 현재페이지를 "bbs.jsp" 라고 생각했을때... 당근 pageNo는 리퀘스트로 받아서 객체생성시 넣어줘야겠죠??

그것도 모르면 바부~ ㅋㅋㅋ

 

for(int i = start ; i <= end ; i++){

  out.println(i) // i를 벡터의 인덱스로 사용하면 되겠죠?? select한것을 벡터에 넣고... 글구 벡터는 0부터시작이니깐

  // 초기값을 -1을 해서 시작하면 되겠네요... int i = start -1 이렇게요~

  // 만약 벡터가 id 라는 이름을 가지고 있다면 id.elementAt(i) 이렇게 선언하면 오케이~ ㅋㅋㅋ

} // 여긴 리스트 영역 알죠??? 게시판에서 가장 큰 부분... =.=b

 

if(prevPageing == 0){

  out.println("prev");

}else{

  out.println("<a href=bbs.jsp?pageNo=" + prevPageing + ">prev</a>");

} // 여긴 전페이지의 유무

 

for(int i = pageingStart ; i <= pageingEnd ; i++){

  if(pageNo == i){  // 현재페이지와 링크페이징번호 같다면 뭐 굳이 링크를 걸 필요가 없겠죠??

    out.println("[" + i + "]");

  }else{

    out.println("<a href=bbs.jsp?pageNo=" + i + ">[" + i + "]</a>");

  }

} // 여긴 페이징 [1] [2] [3] [4] [5] 이런거있죠? ㅎㅎ

 

if(nextPageing == 0){

  out.println("next");

}else{

  out.println("<a href=bbs.jsp?pageNo=" + nextPageing + ">prev</a>");

} // 여긴 다음페이지의 유무

 

2004년 어느날 raniel로부터 제작되었습니다...

머리속엔 생각이 정말 많은데... 표현이 안되네요... *****굉장히 허접***** 하지만 도움이 되었으면 합니다.

 

< 출처 : http://www.jspschool.com >

댓글 없음:

댓글 쓰기