일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ES6
- chartjs
- 인생이재밌다
- git
- terminationGracePeriodSeconds
- 영화예매
- Kubernetes
- jsp
- spread operator
- AWS Route53
- node.js
- html
- json
- AWS RDS
- spring
- mysql
- sessionStorage
- Get
- Bootstrap
- javascript
- 예매로직
- AWS
- topologySpreadConstraints
- mongodb
- zombie-hit apartment
- MySQL Error
- post
- ajax
- ssh
- Java
- Today
- Total
jongviet
July 1, 2021 - paging 기본 본문
*7월1일
-가장 기본적인 paging 로직에 대해 알아보자!
1)PageVO
public class PageVO {
private String range;
private String keyword;
private int pageIndex; //몇번째 페이지 번호인지?
private int countPerPage; //한페이지에 몇개의 글?
public PageVO() {
this(1, 10); //페이징 최초 디폴트 값!
}
public PageVO(int pageIndex, int countPerPage) {
this.pageIndex = pageIndex;
this.countPerPage = countPerPage;
}
//서치했을 때 페이징, pageIndex와 countPerPage값이 들어옴;
public PageVO(String range, String keyword, int pageIndex, int countPerPage) {
this.range = range;
this.keyword = keyword;
this.pageIndex = pageIndex;
this.countPerPage = countPerPage;
}
2)PagingHandler
public class PagingHandler {
private static Logger logger = LoggerFactory.getLogger(PagingHandler.class);
private int totalCount; //DB내 글의 총 개수
private int firstPageIndex; //현재 페이지네이션의 가장 앞번호
private int lastPageIndex; //현재 페이지네이션의 가장 뒷번호
private boolean prev, next; //앞 뒤로 이동하는 버튼의 생성 여부
private PageVO pgvo;
public PagingHandler() {}
public PagingHandler(int totalCount, PageVO pgvo) {
this.totalCount = totalCount;
this.pgvo = pgvo;
//17번(pageIndex)을 클릭했다고 가정;
//17/10.0 -> ceil(1.7)-올림 -> 2.0 * 10 -> 20(lastPageIndex)
this.lastPageIndex = (int)(Math.ceil(pgvo.getPageIndex()/10.0)) * 10;
this.firstPageIndex = this.lastPageIndex - 9; //항상 끝자리기 때문에;
//DB에서 가져온 실제 글의 개수를 기준으로 만들어야 하는 마지막 페이지의 번호
//실제 총 글의 개수는 134개라고 가정, 마지막 페이지 네이션의 번호는? 14개
int realLastPageIndex = (int)Math.ceil((totalCount*1.0)/pgvo.getCountPerPage());
//연산에 의해서 만들어진 마지막 페이지 인덱스번호가 DB상 총 글의 수로 만든 페이지 번호보다 큰 경우 조정 필요
if(this.lastPageIndex >= realLastPageIndex) {
this.lastPageIndex = realLastPageIndex;
}
this.prev = firstPageIndex > 1; //첫번째 페이지가 아닌 경우에는 이전 버튼이 존재해야함; 경우의 수는 1, 11, 21, 31 등등.. 그중 1일 경우에만 false이므로~
this.next = this.lastPageIndex < realLastPageIndex; //DB상 뒤로 갈 값이 더 있으니, 다음 버튼이 존재해야함
}
3)수정 또는 삭제한 후 기존 pageIndex로 다시 돌아가는 처리
-페이징 관련 pgvo 데이터는 계속해서 들고 다녀야한다. 그래야지 특정 게시물 수정/삭제 후 다시 페이지로 돌렸을 때 기존 페이지인덱스가 나오기 때문이다. 그렇다면, 어떻게 쉽게 들고만 다닐 수 있을까?
->list.jsp에서 detail 버튼을 눌렀을 때 모든 pgvo 값을 get방식으로 넘긴다.
<td><a href="/product/detail?pno=${pvo.pno}&pageIndex=${pghdl.pgvo.pageIndex}&countPerPage=${pghdl.pgvo.countPerPage}&range=${pghdl.pgvo.range}$keyword=${pghdl.pgvo.keyword}">${pvo.title }</a></td>
->detail 컨트롤러로 넘어온 pgvo 데이터는 별도 DB를 거치는게 아니라 그대로 실려서 다시 detail.jsp로 나가기에....@modelAttribute로 처리할 수 있음~~~~
@ModelAttribute("pgvo") PageVO pgvo) {
->'redirect:/' 를 활용하여 컨트롤러에서 컨트롤러로 데이터넘길 시 RedirectAttributes reAttr 사용!
reAttr.addFlashAttribute("pgvo", pgvo); //페이징용 값 넘기기;
return "redirect:/product/detail?pno="+pvo.getPno();
'Spring legacy' 카테고리의 다른 글
July 4, 2021 - Spring transaction (0) | 2021.07.04 |
---|---|
July 1, 2021 - DB : local 파일 정리(quartz-scheduler) (0) | 2021.07.01 |
June 30, 2021 - Spring 서칭 (0) | 2021.06.30 |
June 30, 2021 - Spring 파일업로드 (0) | 2021.06.30 |
June 25, 2021 - Spring 개인 필기 (1) | 2021.06.25 |