상세 컨텐츠

본문 제목

스프링 부트로 시작하는 웹 서비스_7

JSP·자바·코틀린

by 김일국 2021. 8. 22. 23:14

본문

### 작업한 소스 깃 : https://github.com/miniplugin/kimilguk-springboot2

### 작업결과 배포 클라우드헤로쿠 : https://kimilguk-springboot2.herokuapp.com/

지난 포스트에 이어서 스프링부트에서 페이징 처리를 제대로 해 보았습니다.

핵심코드: PageRequest 클래스를 사용하고, getPageList 메서드 내용이 핵심 입니다.(아래)

package com.edu.springboot2.service.posts;
import com.edu.springboot2.domain.posts.Posts;
import com.edu.springboot2.domain.posts.PostsRepository;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@RequiredArgsConstructor
@Service
public class PostsPageService {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    private final PostsRepository postsRepository;
    private static final int BLOCK_PAGE_NUM_COUNT = 4; // 블럭에 존재하는 페이지 번호 수
    private static final int PAGE_POST_COUNT = 5; // 한 페이지에 존재하는 게시글 수
    @Transactional
    public Page<Posts> getPostsList(String keyword, Integer pageNum) {
        Page<Posts> page = postsRepository.findByTitleContaining(keyword, PageRequest.of(pageNum, PAGE_POST_COUNT, Sort.by(Sort.Direction.DESC, "id")));
        return page;
    }
    public Integer[] getPageList(Long postsTotalCount, Integer totalLastPageNum, Integer curPageNum) {
        //페이지 번호 배열 반환값 선언
        Integer[] pageList = new Integer[BLOCK_PAGE_NUM_COUNT];
        logger.info(totalLastPageNum + " 비교 " + (curPageNum));
        //블럭 끝 번호 구하기
        Integer blockLastPageNum = BLOCK_PAGE_NUM_COUNT;
        logger.info("블럭 마지막 페이지1 " + blockLastPageNum);
        // 페이지 시작 번호 조정
        int startBlockNum = (int)Math.ceil((curPageNum) / blockLastPageNum);
        int startPageNum = startBlockNum * BLOCK_PAGE_NUM_COUNT;
        //int startPageNum = (int)Math.ceil((curPageNum-1) / totalLastPageNum)+1;
        logger.info("여기 startPageNum " + startPageNum);
        //제일 마지막 페이지 일때
        if (totalLastPageNum == (curPageNum + 1) ) {
            int blockLastPageNumTmp = (int) (postsTotalCount - (curPageNum * PAGE_POST_COUNT)) - 1;//제일 마지막 페이지 갯수 구하기
            if(blockLastPageNumTmp < BLOCK_PAGE_NUM_COUNT) {//마지막 개수가 BLOCK_PAGE_NUM_COUNT 개수보다 작을때
                blockLastPageNum = blockLastPageNumTmp + 1;
                logger.info("여기!1 " + blockLastPageNumTmp);
            }
        }
        // 페이지 번호 할당
        for (int val = startPageNum, idx = 0; idx < blockLastPageNum; val++, idx++) {
            pageList[idx] = val;
            logger.info("pageList[{}] = {} ", idx, pageList[idx]);//페이지 번호는 jsp 에서...
        }
        return pageList;
    }
}

- 기존 페이징 처리 하단에 페이지 블럭 단위로 이동가능한 버튼 기능 추가(아래)

### 20210822() 작업.
- 페이징 자바쪽 좀더 복잡한 로직 처리. PostsService.java -> PostPageService.java 로 분리
- 제대로 페이징 작업 참고: https://matchless.tistory.com/31
- 머스태치 뷰단 기존 간단한 적용도 보존 하면서 그 아래 신규 페이징 뷰단 추가 OK.

관련글 더보기

댓글 영역