2022. 9. 4. 13:42
반응형

현재 페이지, 총 아이템 개수, 한 페이지에 표시할 아이템 개수를 설정

네비게이션 시작/끝 페이지 번호, 이전/다음 버튼 유무, 네비게이션 마지막 번호 등이 결정된다.

한 화면에 표시되는 페이지 번호 최대 표시 개수는 10으로 고정해두었는데 바꾸려면 navSize를 수정하면 된다.

 

Pagination pagination = new Pagination(page, totalItemCount, pageSize);

화면상에 표시할 때

pagination.getStartPage() 부터 pagination.getLastPage() 까지 번호 추가

pagination.hasPrev() == true 인 경우 이전 버튼 추가

pagination.hasNext() == true 인 경우 다음 버튼 추가

 

pagination을 페이지로 가져와 대충 만들어보면 다음과 같은 모양으로 나온다.

 

public class Pagination {
    private int page = 1;
    private int pageSize = 10;
    private int totalItemCount;

    private int startPage;
    private int lastPage;
    private int endPage;
    private int navSize = 10;
    private boolean hasPrev;
    private boolean hasNext;

    private int offset;

    public Pagination(int page, int totalItemCount, int pageSize) {
        this.pageSize = pageSize;
        this.totalItemCount = totalItemCount;
        this.page = page;
        setup();
    }

    public Pagination(int page, int totalItemCount) {
        this.totalItemCount = totalItemCount;
        this.page = page;
        setup();
    }

    private void setup() {
        endPage = (int) Math.ceil((double) totalItemCount / pageSize);
        if(page > endPage) page = endPage;
        else if(page <= 0) page = 1;
        startPage = ((int) Math.ceil((double) page/navSize) - 1) * navSize + 1;
        lastPage = Math.min(startPage + navSize - 1, endPage);
        offset = pageSize * (page - 1);
        hasPrev = startPage > 1;
        hasNext = lastPage < endPage;
    }

    
    public int getPage() {
        return this.page;
    }
    
    public int getPageSize() {
        return this.pageSize;
    }
    
    public int getTotalItemCount() {
        return this.totalItemCount;
    }

    public int getStartPage() {
        return startPage;
    }

    public int getLastPage() {
        return lastPage;
    }

    public int getEndPage() {
        return endPage;
    }

    public int getOffset() {
        return offset;
    }

    public boolean getHasPrev() {
        return hasPrev;
    }

    public boolean getHasNext() {
        return hasNext;
    }
}

 

https://github.com/juragi/spring-demo/commit/e8a654ec30548da757904e0347cb3b010f93511b

 

Pagination test · juragi/spring-demo@e8a654e

Show file tree Showing 2 changed files with 93 additions and 0 deletions.

github.com

 

반응형