일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 온라인 햇살론 재대출
- 온라인 햇살론 금리
- 화재보험 다이렉트 보험료
- 휴대폰 번호보호 서비스
- 금리 사이트 추천
- KB손해보험 보험료
- 서민 대환 대출
- 알뜰폰 요금제 비교
- 서민 저금리 대출
- 알뜰폰 요금제
- 온라인 햇살론 추가대출
- 서민 대환 프로그램
- 서민 저금리 대출 대환 프로그램
- 금리 비교 사이트
- 온라인 햇살론 자격
- 주택 화재보험 보험료
- 신용대출
- 온라인 햇살론 할인
- KB손해보험 주택 화재보험
- 주택 화재보험 다이렉트
- AI 이미지 사이트
- KB손해보험 다이렉트 보험료
- 온라인 햇살론 보증료
- 대출 금리 비교 추천
- 노벨피아 추천
- 화재보험 다이렉트
- 온라인 햇살론 보증수수료
- 서민 저금리
- 온라인 햇살론 취급제한
- KB손해보험 주택 화재보험 다이렉트 보험료 추천
- Today
- Total
아이인포
게시판 만들기 페이징 본문
과거 게시판 페이징 만들기 답변 링크.
나름 그때 당시 공들여서 썼다고 생각해서 블로그에 포스팅 해봅니다.
아래 내용
클래스를 구현하기 전에 조건부터 생각해볼까요
1. 페이징을 하기 위해서는 한 화면에 몇개의 글을 보여줄 것인가?
2. 총 몇개의 페이지를 보여 줄 것인가?
의 선 조건이 있어야겠죠.
그렇다면 페이징 클래스는 몇개의 글을 보여줄 것인가를 위한 w_size 라는 멤버 변수와
몇개의 페이지를 보여줄 것인가를 위한 p_size 라는 멤버 변수를 둬보죠.
계산은 어떻게 할까요?
w_size = 5;
p_size = 5;
(42 -1 / 5) + 1 = 9
(40-1 / 5)+1 = 8 // 딱 나누어 떨어지는 40으로 해도 8 이 맞게 나오는군요.
이런 계산을 통하면 총 페이지수가 나오겠군요. 9 가 나왔습니다.
그 다음 구해야 할것은 뭐가 있을까요? 아. 페이징 수가 나왔으니 페이징 사이즈에 따라 다시
시작 페이지를 보여줘야 겠지요. 보통 화면이
pre 1.2.3.4.5 next
pre 6.7.8.9.10 next
이런식의 화면을 생각할 것입니다.
여기서 1 , 6 을 구하고 5, 10 그러니까 페이징의 시작과 끝을 구해야 겠죠??
시작 페이지는 현재 보고 있는 ( (페이지 번호 -1) / 총 페이지 사이즈 ) * 총 페이지 사이즈 + 1
로 구할수 있습니다.
Default 페이지 번호는 1로 되겠죠?
( ( 1 -1 ) / 5 ) * 5 + 1 = 1
만약 7 페이지를 보고 있다고 하고 7을 넣어봅시다.
( ( 7 -1 ) / 5 ) * 5 + 1 = 6
이런식으로 첫 시작 페이지 번호를 구할수 있습니다.
그럼 마지막 번호는 어떻게 구할까요?
시작 페이지 번호 + 페이지 총 사이즈 -1
1 + 5 - 1 = 5 5가 나오는군요..
시작 페이지 번호를 6으로 바꿔볼까요?
6 +5 -1 = 10 10이 나오는군요.. 맞죠?
하지만 여기서 총 페이지 숫자는 9입니다. 9가 마지막 페이지인데 10이 나올수가 없죠??
따라서 다음과 같이 구합니다.
시작 페이지 번호 + 페이지 총 사이즈 -1 과 총 페이지 수 중 더 작은 것!!
1 + 5 - 1 = 5 , 총 페이지 수 (9) 따라서 5
6 +5 -1 = 10 , 총 페이지 수 (9) 따라서 9
그러면 화면에 이렇게 보여줄수 있겠죠??
1,2,3,4,5
6,7,8,9
뭔가 허전하죠. pre와 next가 빠졌군요.. pre는 pre가 잇을때에 보여주거나 링크를 걸고
next도 또한 마찬가지군요..어떤 조건을 붙일까요? pre는 페이지 스타트가 1이 아니면 되겠죠?
next는 총 페이지 수보다 작으면 되겠군요.
그렇다면 페이지 표시는 다 나왔군요.
페이지를 눌렀을때 원하는 글의 범위를 셀렉트 하기 위해 글의 범위는 간단하죠
현재 페이지 수 * 5 하면 마지막 글의 번호(이 번호는 범위 넘버 )가 나오겠죠?
1 * 5 = 5
6 * 5 = 35
여기서 다시 5를 빼면 시작 번호가 나오죠.
5 - 5 + 1 = 1;
35 - 5 +1 = 31;
현재 페이지수가 1일 경우는 1~5의 글을 보여주고 , 6일 경우 31~35의 글을 보여줍니다. 맞죠?
이걸 클래스로 구현해볼까요.
public class Paging {
public int w_size = 5;
public int p_size = 5;
public int writing_Count = 0;
public int cur_Page = 0;
public Paging(int w_size, int p_size, int writing_Count, int cur_Page) {
super();
this.w_size = w_size;
this.p_size = p_size;
this.writing_Count = writing_Count;
this.cur_Page = cur_Page;
}
public int getPage_Count()
{
return ( (writing_Count - 1) / w_size) + 1;
}
public int getPage_Start()
{
return ( ( cur_Page - 1 ) / p_size ) * p_size + 1;
}
public int getPage_End()
{
return Math.min( getPage_Start() + p_size - 1 , getPage_Count() );
}
public boolean isPre()
{
return getPage_Start() != 1;
}
public boolean isNext()
{
return getPage_End() < getPage_Count();
}
public int getWriting_Start()
{
return getWriting_End() - w_size + 1;
}
public int getWriting_End()
{
return cur_Page * w_size;
}
public static void main(String[] args) {
// 여러가지 매개변수로 테스트 해보시기 바랍니다.
Paging pg = new Paging(5, 5, 26 , 6 );
// 총 글의 갯수는 select count(*) from board 하면 나오겠죠 ,
//현재 보고 있는 페이지 번호는 Default 1, 그리고 밑에 페이징에서 링크 걸린 i가 현재 페이지가 됩니다.
//Paging pg = new Paging(한 화면에 보여질 글 수 , 페이지 분할 수 , 총 글의 갯수 , 현재 보고 있는 페이지 번호 );
System.out.println("총 페이지 개수 : "+pg.getPage_Count());
System.out.println("페이지 시작 숫자 : "+pg.getPage_Start());
System.out.println("페이지 마지막 숫자 : "+pg.getPage_End());
System.out.println("Pre 표시 여부 : "+pg.isPre());
System.out.println("Next 표시 여부 : "+pg.isNext());
System.out.println("글 범위 시작 번호 : "+pg.getWriting_Start());
System.out.println("글 범위 끝 번호 : "+pg.getWriting_End());
System.out.println("select * from board where no between "+pg.getWriting_Start()+" and "+pg.getWriting_End());
// 이 셀렉트 결과를 화면에 뿌린 후에
// 밑에서 페이징을 하면 되겠죠? 이거에 링크를 걸고 i가 현재 페이지 번호로서 링크가 걸리게 되겠죠?
if(pg.isPre())
System.out.print(" Pre ");
for(int i = pg.getPage_Start(); i <= pg.getPage_End();i++)
{
System.out.print(" "+i+" ");
}
if(pg.isNext())
System.out.print(" Next ");
// 이런 페이징 클래스를 작성하여 사용하는 것이 여러모로 편리합니다. ~ ㅋㅋ
}
}