페이징 연결하기 전 메서드 설정

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;
				
		
	}
	
}

댓글남기기