프로젝트

29일차

사랑박 2023. 3. 20. 14:02

오늘은 Part 2. 게시판 서비스 강의의 `게시판 페이징 구현` 부분을 학습하였다.
 

페이지네이션 서비스 구현

페이지네이션을 스프링 서비스 빈 형태로 설계하여 현재 페이지와 총 페이지 수를 넣어주면 페이지 바에 사용할 번호 리스트를 반환하게 설계하였다.

import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.IntStream;

@Service
public class PaginationService {

    private static final int BAR_LENGTH = 5;

    public List<Integer> getPaginationBarNumbers(int currentPageNumber, int totalPages) {
        int startNumber = Math.max(currentPageNumber - (BAR_LENGTH / 2), 0);
        int endNumber = Math.min(startNumber + BAR_LENGTH, totalPages);
        return IntStream.range(startNumber, endNumber).boxed().toList();
    }

    public int currentBarLength(){
        return BAR_LENGTH;
    }
}

바 길이는 5로 해주었다.
 

페이지네이션을 컨트롤러에 반영

    @GetMapping
    public String articles(
            @RequestParam(required = false)SearchType searchType,
            @RequestParam(required = false)String searchValue,
            @PageableDefault(size=10,sort="createdAt",direction = Sort.Direction.DESC) Pageable pageable,
            ModelMap map
    ){
        Page<ArticleResponse> articles = articleService.searchArticles(searchType, searchValue, pageable).map(ArticleResponse::from);
        List<Integer> barNumbers = paginationService.getPaginationBarNumbers(pageable.getPageNumber(), articles.getTotalPages());

        map.addAttribute("articles", articles);
        map.addAttribute("paginationBarNumbers", barNumbers);

        return "articles/index";
    }

컨트롤러에 바에 사용할 번호리스트를 받아와서 뷰에 barNumbers에 전달하는 코드를 추가하였다.

 

@ParameterizedTest - @MethodSource

@MethodSource를 사용해 복잡한 인수들을 파라미터로 넘길 수 있다.
Stream을 반환하는 static 메서드를 작성해주면 된다.
 

 

'프로젝트' 카테고리의 다른 글

30일차  (0) 2023.03.21
28일차  (0) 2023.03.19
27일차  (0) 2023.03.18
26일차  (0) 2023.03.17
25일차  (0) 2023.03.16