Spring

[Spring] 페이징 처리를 위한 공식(시작 페이지와 끝 페이지)

jane.dev 2021. 9. 25. 22:04
반응형

버튼 개수는 1부터 10까지, 10개로 고정

끝 페이지 번호를 구하는 공식

int endPage = (int)(Math.ceil(현재 페이지 / (double)버튼 개수) * 버튼 개수);

현재 보고있는 페이지가 253일 경우,

(현재 페이지 / (double)버튼 개수)

1. 253을 10.0으로 나눔 → 25.3

(Math.ceil(현재 페이지 / (double)버튼 개수)

2. 25.3을 올림 → 26.0

(Math.ceil(현재 페이지 / (double)버튼 개수) * 버튼 개수)

3. 26.0에 10을 곱함 → 260.0

(int)(Math.ceil(현재 페이지 / (double)버튼 개수) * 버튼 개수)

4. 정수로 변환 → 260: 끝 페이지 번호

 

시작 페이지 번호를 구하는 공식

int startPAge = endPage - 버튼 개수 + 1;

끝 페이지가 260일 경우,

끝 페이지 - 버튼 개수

1. 260에 10을 뺌 → 250

끝페이지 - 버튼 개수 + 1

2. 250에 1을 더함 → 251: 시작 페이지 번호

 

게시물의 개수가 10(버튼 개수) * 10(페이지당 나타내지는 게시글 수)보다 많으면 끝 페이지 번호가 실제 게시글보다 많이 보여질 수 있음

실제 끝 페이지 번호 구하는 공식

**시작 페이지가 구해지고 난 다음에 작성해야함**

int realEndPage = (int)(Math.ceil((전체 게시글 수 * 1.0) / 페이지 당 글 개수));
if(realEndPage < endPage){
    endPage = realEndPage;
}

끝 페이지 번호 구하는 공식과 실제 끝 페이지 번호 구하는 공식을 비교

→ 전체 글 개수가 2433개 일 경우, 페이지 개수는 244개 이여야 함

 

끝 페이지 번호 구하는 공식

1. 244 / 10.0 → 24.4

2. 244.4을 올림 → 25.0

3. 25.0 * 10 → 250 : 끝 페이지 번호

 

실제 끝 페이지 번호 구하는 공식

전체 게시글 수 * 1.0

1. 2433 * 1.0 → 2433.0

(전체 게시글 수 * 1.0) / 페이지 당 글 개수

2. 2433.0 / 10 → 243.3

(Math.ceil((전체 게시글 수 * 1.0) / 페이지 당 글 개수))

3. 243.3을 올림 → 244.0

(int)(Math.ceil((전체 게시글 수 * 1.0) / 페이지 당 글 개수))

4. 정수로 변환 → 244 : 실제 끝 페이지 번호

 

∴ 끝 페이지 번호를 구하는 공식으로만 작성하면 마지막 페이지에는 게시글이 없어도 버튼이 나타나지기 때문에,

   실제 끝 페이지 번호를 구하는 공식을 덧붙여 실제 끝 페이지 번호가 끝 페이지 번호보다 작다면 적용될 수 있도록 작성