전체 데이터 수(total)를 이용해 진짜 끝 페이지(realEnd)가 몇 번까지 되는지 계산 진짜 끝 페이지(realEnd)가 구해둔 끝 번호(endPage)보다 작다면 끝 번호는 작은 값이 되어야 함
◎ 이전(prev) 계산
this.prev = this.startPage > 1;
시작 번호가 1보다 큰 경우라면 존재함
◎ 다음(next) 계산
this.next = this.endPage < realEnd;
realEnd가 끝 번호(endPage)보다 큰 경우에만 존재함
2. 페이징 처리를 위한 클래스 설계
▷ 클래스를 구성하면 Controller 계층에서 JSP 화면에 전달할 때 객체를 생성해 Model에 담아 보내는 과정이 단순해짐
◎ PageDTO 클래스 생성
package org.codehows.domain;
import lombok.Getter;
import lombok.ToString;
@Getter
@ToString
public class PageDTO {
private int startPage; // 페이징 시작 번호
private int endPage; // 페이징 끝 번호
private boolean prev, next; // 이전 페이지, 다음 페이지
private int total; // 전체 데이터 개수
private Criteria cri; // 현재 페이징 번호, 한페이지에 표시할 개수
public PageDTO(Criteria cri, int total) {
this.cri = cri;
this.total = total;
this.endPage = (int)(Math.ceil(cri.getPageNum()/10.0))*10;
this.startPage = this.endPage - 9;
int realEnd = (int) (Math.ceil((total * 1.0)/cri.getAmount()));
if (realEnd < this.endPage) {
this.endPage = realEnd;
}
this.prev = this.startPage > 1; // 현재 페이징 시작 번호가 1보다 크다면 이전버튼(true)
this.next = this.endPage < realEnd; // 현재 페이징 끝 번호가 전체 끝보다 작다면 다음버튼(true)
}
}
◎ BoardController 클래스의 list() 메소드 수정
▷ Model에 담아 화면에 전달
▷ src/main/java/org/codehows/controller → BoardController 클래스 수정
...(생략)...
@GetMapping("/list")
public void list(Criteria cri, Model model) {
log.info("list : " + cri);
model.addAttribute("list", service.getList(cri));
model.addAttribute("pageMaker", new PageDTO(cri, 123));
}
...(생략)...
▷ PageDTO 클래스에 객체를 만들어 Model에 담아줍니다. ▷PageDTO 구성을 위해 전체 데이터 수가 필요한데 아직 지정되지 않아 임의로 123을 지정했습니다.
3. JSP 페이지 번호 출력
▷ JSTL을 통해 페이지 번호를 출력할 수 있음
▷ SB Admin2는 부트 스트랩 기반으로 구성되어 있으므로 관련 링크들에 필요한 예제들이 존재
▷ SB Admin2의 pages 폴더 → tables.html 페이지의 페이지 처리를 이용해서 구성