Part 14. 페이징 화면 처리

14.2 페이징 처리를 위한 클래스 설계

  • 화면에 페이징 처리를 위해 위와 같이 여러 정보가 필요하다면 클래스를 구상해 처리하는 방식도 편한 방식이 될 수 있다.
  • 클래스를 구상하면 Controller 계층에서 JSP 화면에 전달할 때에도 객체를 생성해 Model에 담아 보내는 과정이 단순해지는 장점도 있다.
  • org.zerock.domain 패키지에 PageDTO 클래스를 설계한다.
< PageDTO >
package org.zerock.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;		
		this.next = this.endPage < realEnd;
	}
}
  • PageDTO는 생성자를 정의하고 Criteria와 전체 데이터 수 (total)를 파라미터로 지정한다.
  • Criteria 안에는 페이지에서 보여주는 데이터 수(amount)와 현재 페이지 번호(pageNum)를 가지고 있기 때문에 이를 이용해 필요한 모든 내용을 계산할 수 있다.
  • BoardController에서는 PageDTO를 사용할 수 있도록 Model에 담아 화면에 전달할 필요가 있다.
  • 메서드를 다음과 같이 수정한다.
< BoardController클래스의 list() >
	@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));
	}
  • list()는 'pageMaker'라느 이름으로 PageDTO 클래스에서 객체를 만들어 Model에 담아준다.
  • PageDTO를 구성하기 위해 전체 데이터 수가 필요한데, 아직 그 처리가 이루어지지 않았으므로 임의의 값 123을 지정한다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글