페이징(paging)
slPro 7차 일지에서 페이징을 다뤘었는데 해당 코드에 오류가 있다는 것을 알게 되었다.
private int nowP; // 현재 페이지
private int firstP = 1; // 맨 첫번째 페이지
private int lastP; // 맨 마지막 페이지
private int leftP; // 현재 페이지의 첫번째 페이지 (중간페이지 기준 11)
private int rightP; // 현재 페이지의 마지막 페이지 (중간페이지 기준 20)
private int beforeP; // 이전 페이지의 첫번째 페이지 (중간페이지 기준 1)
private int nextP; // 다음 페이지의 첫번째 페이지 (중간페이지 기준 31)
private int pageSize = 10;
public Paging(int nowP, int bCnt) {
this.nowP = nowP;
lastP = (int)Math.ceil((double)bCnt/(double)pageSize);
leftP = ((((nowP-1)/pageSize))*pageSize) +1;
rightP = leftP + pageSize -1;
beforeP = leftP - pageSize;
nextP = leftP + pageSize;
}
매개변수로 현재 페이지와 전체 글 갯수를 받아와서 계산해준다.
this.nowP = nowP;
현재 페이지는 그대로 현재 페이지에 넣어준다.
lastP = (int)Math.ceil((double)bCnt/(double)pageSize);
맨 마지막 페이지는 소수점이 나올 수 있도록 전체 글 갯수와 페이지 사이즈를 강제형변환으로 double 타입으로 변경해준 다음, 소수점올림을 하며 int 타입으로 다시 강제형변환해준다.
전체 글 갯수와 페이지 사이즈를 한번에 묶어서 double 타입으로 형변환하면 나눈 후에 형변환하게 되어서 소수점이 날아가게 된다.
leftP = ((((nowP-1)/pageSize))*pageSize) +1;
rightP = leftP + pageSize -1;
beforeP = leftP - pageSize;
nextP = leftP + pageSize;
현재 페이지의 첫번째 페이지만 구하면 현재 페이지의 마지막, 이전 페이지의 첫번째, 다음 페이지의 첫번째 페이지 수를 구할 수 있게 된다.
현재 페이지의 첫번째 페이지는 우선 현재 페이지에서 1을 뺀 다음, 전체 글 갯수로 나눠준다. 나눈 후 소수점 내림을 해줄건데 둘 다 int 타입이기 때문에 굳이 double로 바꿔서 소수점을 살린 다음 소수점을 날리고 int 타입으로 형변환하지 않아도 그냥 나누면 소수점이 날아가기 때문에 형변환을 해주지 않았다.
나눈 값에 페이지 사이즈를 곱해주고, 1을 더하면 첫번째 페이지 값이 된다.
현재 페이지의 마지막 페이지는 현재 페이지의 첫번째 페이지 값에서 페이지 사이즈에서 1을 뺀 값을 더하면 구해진다.
이전, 다음 페이지의 첫번째 페이지는 현재 페이지의 첫번째 페이지에서 페이지 사이즈를 빼거나 더하면 구해진다.
'프로그래밍 > 저장' 카테고리의 다른 글
sts4) 모달 (0) | 2024.02.19 |
---|---|
Post로 사용하여 값 전송하기 (0) | 2024.02.06 |
STS4) 타임리프 편하게 사용하기 (0) | 2024.02.02 |
타임리프 반복문 th:each (0) | 2024.02.02 |