sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  

관련된 클래스는 다음과 같다.

1. com.omnibuscode.util.board.paging.PagingDao.java
2. com.omnibuscode.util.board.paging.PagingHelper.java
3. com.omnibuscode.util.board.paging.PagingHelperImpl.java
4. com.omnibuscode.util.board.paging.PagingHelperImplDao.java

 

paginghelper.gif

 

페이지 계산시 가장 핵심적인 변수는 다음과 같다.

1. 전체 리스트 갯수 (totalCount)
2. 한 페이지당 표시할 리스트 갯수 (cPerPage)
3. 한 블럭당 표시할 페이지 갯수 (pPerBlock)

위의 변수가 설정이 되면 전체 페이지의 수(totalPage)와 전체 블럭의 수(totalBlock) 를 계산해 낼 수 있다.
그리고 사용자가 페이지 이동을 하게 되어 현재 표시하고 싶은 페이지(curPage)가 입력이 되면 현재 페이지가 속한 블럭(curBlock)을 계산해 낼 수 있다.

페이징에서 뽑아내야 할 값들은 위와 같으며 이 값들을 계산하게 도와줄 클래스는 PagingHelperImpl 클래스이다.
이 클래스는 사실 JDF(Java Development Framework) 에서 사용하는 페이징 도우미 클래스이다.
PagingHelper 인터페이스를 상속받아 실제 페이징 계산을 구현하고 결과물로 페이지 이동 링크 및 텍스트를 리턴하거나 현재 페이지의 목록을 리턴해 주는 메서드들을 제공해 준다.
하지만 이 클래스는 원래 설계 목적이 DAO 클래스에서 이 클래스를 상속받아 미리 정의해 놓은 탬플릿 메서드들을 이용하는 것이었다.
물론 그러한 방식에 있어서 별다른 문제점이 존재하는 것은 아니지만 상속을 통해 구현을 해야 하기 때문에 DAO클래스가 PagingHelper 클래스에 의존적이 될 수 밖에 없었다.
해서 PagingDao 인터페이스를 생성하고 PagingHelperImpl을 확장한 PagingHelperImplDao 클래스를 작성하였다.
DAO클래스가 PagingDao 인터페이스를 implements하고 이 클래스를 구현한 객체를 PagingHelperImplDao 클래스에 구성객체로 셋팅을 해주면 나머지는 PagingHelperImplDao 클래스가 알아서 계산하고 현재페이지의 리스트를 리턴해주도록 바꿔주었다.
이는 리스트를 뽑아오는데에 있어서 실행도중 DAO를 다른 객체로 교체하게 되면 리스트를 다르게 뽑아올 수 있다는 것을 의미한다.
여기에 적용된 패턴은 Template 메소드 패턴이고 상속이 아닌 구성을 통해서 DAO가 PagingHelperImplDao 클래스에게 의존적이지 않게 만들어준다.
Strategy패턴과 같이 PagingHelperImplDao 클래스에 전달하는 DAO 구성객체 따라서 실행시에 동적으로 리스트에 변화를 줄 수 있는 잇점을 얻을 수 있다.

개발자가 해주어야 할 것은, PagingDao를 implements하는 DAO클래스를 작성하고, 이를 PagingHelperImplDao 클래스의 setPagingDao(PagingDao pd) 메서드로 구성객체를 셋팅해주면
PagingHelper 인터페이스에 정의된 public 메서드들을 통해 페이징에 필요한 값들을 리턴 받을 수 있게 된다.
코드 예제는 다음과 같다.

·미리보기 | 소스복사·
 
  1. PagingHelper phd = new PagingHelperImplDao(req);   
  2. phd.setPagingParams("/TestPagingProject/simplePagingTest", 20, 5); //RequestURI, ContentsPerPage, PagesPerBlock   
  3. phd.setPagingDao(new SimplePagingDaoForMysqlImpl(args));  

DAO의 생성자 파라미터로 전달받는 args 변수는 검색정보와 정렬정보등의 추가적인 파라미터들을 저장하고 있는 변수이다.

번호 제목 글쓴이 날짜 조회 수
103 J2SE 5.0 - 제네릭(GENERIC) 황제낙엽 2007.08.27 389
102 Cookie Test file 황제낙엽 2007.08.27 280
101 쿠키 유틸리티 클래스 CookieBox 만들기 file 황제낙엽 2007.08.27 420
100 통합을 위한 요소 기술, Java와 XML 황제낙엽 2007.08.27 419
99 중복 로그인 제한 기법에 대하여 황제낙엽 2007.08.23 457
98 interface와 abstract클래스의 차이점 황제낙엽 2007.07.28 520
97 javadoc - The Java API Documentation Generator 황제낙엽 2007.07.25 574
96 자바의 I/O 예제 [3] file 황제낙엽 2007.07.16 454
95 자바의 I/O 예제 [2] file 황제낙엽 2007.07.14 292
94 계층형(답변형) 게시판 로직(최근 답변 하단으로) 황제낙엽 2007.07.11 434
93 J2SE 5.0 - 주석(annotation,표식) 개요 황제낙엽 2007.07.03 393
92 include문과 logging 설정 황제낙엽 2007.03.23 551
91 [BPP] 게시판 페이징 로직 분석 - M1.1 - 샘플 다운로드 및 사용법 file 황제낙엽 2007.06.15 440
» [BPP] 게시판 페이징 로직 분석 - (5) 페이지 계산 file 황제낙엽 2007.06.15 438
89 [BPP] 게시판 페이징 로직 분석 - (4) 쿼리문의 자동완성 file 황제낙엽 2007.06.14 489
88 [BPP] 게시판 페이징 로직 분석 - (3) 검색과 정렬 file 황제낙엽 2007.06.13 354
87 [BPP] 게시판 페이징 로직 분석 - (2) 간단한 페이징 기법 황제낙엽 2007.06.08 826
86 [BPP] 게시판 페이징 로직 분석 - (1) 클래스 목록 file 황제낙엽 2007.06.06 393
85 문자열의 앞뒤space제거처리 성능체크 황제낙엽 2007.06.03 418
84 간단한 서블릿 예제들 file 황제낙엽 2007.05.12 323