Spring 게시판 만들기(17)
페이징 연결하기 전 메서드 설정
Criteria 클래스 생성(domain 안쪽에)
package com.demo.domain;
import org.springframework.web.util.UriComponentsBuilder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
// 현재 페이지, 페이지마다 출력건수
// 검색필드 : 검색종류, 검색어
@ToString
@Setter
@Getter
public class Criteria {
private int pageNum; // 현재페이지 번호
private int amount; // 게시물 출력개수
private String type; // 검색종류(제목, 내용, 작성자 등)
private String keyword; // 검색어
// 기본생성자 정의 -> 컨트롤러에서 첫번째를 받기 위해서 정의해놓아야함
public Criteria() {
this(1,10);
}
// pageNum과 amount만 using field생성하기
// 매개변수가 있는 생성자 정의
public Criteria(int pageNum, int amount) {
this.pageNum = pageNum;
this.amount = amount;
}
// 검색기능
public String[] getTypeArr() {
return type == null? new String[] {} : type.split("");
}
public String getListLink() {
UriComponentsBuilder builder = UriComponentsBuilder.fromPath("")
.queryParam("pageNum", this.pageNum)
.queryParam("getAmount", this.getAmount())
.queryParam("getType", this.getType())
.queryParam("getKeyword", this.getKeyword());
return builder.toUriString();
}
}
PageDTO 클래스 생성(domain 안쪽에)
package com.demo.domain;
// jsp에서 [이전] 1 2 3 4 5 [다음] 형태를 만들기 위한 정보를 구성하는 목적
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;
int pageSize = 5;
int endPageInfo = pageSize - 1; // 5 - 1 = 4
// PageNum 이 1~5 범위에 해당되면, endPage 변수의 값이 돌일하게 된다 1 2 3 4 5
// PageNum 이 6이면, endPage 변수의 값이 다르게 된다 6 7 8 9 10
// (int) (ceil(1 / 5.0)) * 5, (int) (ceil(2 / 5.0)) * 5, (int) (ceil(3 / 5.0)) * 5
// Math.ceil 소수값이 존재하면 올려버림 0.1 -> 1
this.endPage = (int) (Math.ceil(cri.getPageNum() / (double) pageSize)) * pageSize;
this.startPage = this.endPage - endPageInfo;
// 실제 데이터 수를 사용한 전체페이지 수를 구한다
int realEnd = (int) (Math.ceil((total * 1.0) / cri.getAmount()));
if(realEnd <= this.endPage) {
this.endPage = realEnd;
}
// 이전, 다음 표시여부
this.prev = this.startPage > 1;
this.next = this.endPage < realEnd;
}
}
댓글남기기