능글맞은 구렁이
SrpingBoot-목록 데이터페이지 처리 본문
1. 화면까지 전달되는 데이터는 PageResultDTO를이용하여 화면에서는 페이지 처리를 진행한다.
2. PageResultDTO 타입으로 처리된 결과에는 시작 페이지, 끝 페이지 등 필요한 정보를 담아서 화면에서는 필요한 내용들만 찾아서 구성이 가능하도록 설계한다.
3. 화면에서 필요한 페이징 처리 구성요소
1) 10개씩 페이지 번호를 출력
2)1에서 10까지는 이전으로 가는 버튼이 나오지 않도록
3)10페이지 이후에는 이전으로 가는 링크 생성
4)마지막 페이지의 링크 계산
즉, 화면에서 시작페이지 번호(start)
화면에서 끝 페이지 번호 (end)
이전/다음이동 링크 여부 (prev, next)
현재 페이지 번호 (page)
페이징 처리를 위한 가장 필요한 정보 : 현재 사용자가 보고 있는 페이지 정보 화면에 10개씩 페이지 번호를 출력한다고 가정
공식 | 코드 |
정보구하는 공식 | tempEnd=(int)(Math.ceil(페이지 번호/10.0))*10; |
시작번호 | start = temp -9; |
끝번호 | end=totalPage > tempEnd? tempEnd : totalPage; |
이전 링크 여부 | prev = start>1; |
다음링크여부 | next = totalpage>tempEnd; |
1페이지의 경우 | Math.ceil(1/10.0)*10 / 시작번호:1 |
10페이지의 경우 | Math.ceil(10/10.0)*10 / 시작번호 : 1 |
package com.example.guestbook.dto;
import lombok.Data;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Data
public class PageResultDTO<DTO, EN> {
//DTO리스트
private List<DTO> dtoList;
//총페이지
private int totalPage;
//현재페이지
private int page;
//목록사이즈
private int size;
//시작페이지번호
private int start;
//끝 페이지 번호
private int end;
//페이지번호 목록
private List<Integer> pageList;
//이전 버튼 링크 여부
private boolean prev;
//
private boolean next;
public PageResultDTO(Page<EN> result , Function<EN, DTO> fn){ //2.
dtoList = result.stream().map(fn).collect(Collectors.toList()); //DTO리스트
totalPage=result.getTotalPages();//전체페이지
makePageList(result.getPageable());
}
//페이지 목록 메서드
private void makePageList(Pageable pageable){
this.page=pageable.getPageNumber()+1;
this.size=pageable.getPageSize();
int tempEnd=(int)(Math.ceil(page/10.0))*10;
start = tempEnd-9;
prev = start > 1;
end = totalPage>tempEnd?tempEnd:totalPage;
next = totalPage > tempEnd;
pageList = IntStream.rangeClosed(start,end).boxed().collect(Collectors.toList());
}
}
@Test
public void testList(){
PageRequestDTO pageRequestDTO = PageRequestDTO.builder().page(1).size(10).build();
PageResultDTO<GuestbookDTO, Guestbook> resultDTO = service.getList(pageRequestDTO);
System.out.println("PREV:"+resultDTO.isPrev());
System.out.println("PREV:"+resultDTO.isNext());
System.out.println("PREV:"+resultDTO.getTotalPage());
System.out.println("---------------------");
for (GuestbookDTO guestbookDTO : resultDTO.getDtoList()) {
System.out.println(guestbookDTO);
}
System.out.println("---------------------");
resultDTO.getPageList().forEach(i-> System.out.println(i) );
//
}
}
'Framework > SpringBoot' 카테고리의 다른 글
SpringBoot-Thymeleaf(URL) (0) | 2021.07.20 |
---|---|
SpringBoot-SECURITY (0) | 2021.07.19 |
guestbook 프로젝트 - 구조만들기 (0) | 2021.07.09 |
SpringBoot-Thymeleaf(레이아웃) (0) | 2021.07.09 |
springBoot-MVC/View Templates (0) | 2021.07.08 |
Comments