#게시판 페이징 처리(Spring)
개발환경
Server - Java(Spring)사용
Web - Jsp사용
게시판에서 페이징 리스트를 사용하기위하여
순서
- 현재 페이지번호를 Web으로부터 받아올것 ,
- 게시판 게시글 갯수(Count) 값을 가져올것,
- 갯수와 현재 페이지 번호를 가지고 페이징 알고리즘을 활용하여 End페이지 계산 및 Prev,Next버튼 생성
소스코드
Controller(server)
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(PageMaker pagemaker, Model model) {
logger.info("START LIST");
int count = 0;
pagemaker.setPage(pagemaker.getPage());
count = service.count(); // 레코드 총 갯수 구함
pagemaker.setCount(count); // 페이지 계산
List<BoardVO> list = service.getRead(pagemaker.getPage());
System.out.println("list = " + list.toString());
model.addAttribute("result", list);
model.addAttribute("pageMaker", pagemaker);
return "/board/list";
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(PageMaker pagemaker, Model model) {
logger.info("START LIST");
int count = 0;
pagemaker.setPage(pagemaker.getPage());
count = service.count(); // 레코드 총 갯수 구함
pagemaker.setCount(count); // 페이지 계산
List<BoardVO> list = service.getRead(pagemaker.getPage());
System.out.println("list = " + list.toString());
model.addAttribute("result", list);
model.addAttribute("pageMaker", pagemaker);
return "/board/list";
}
Web(jsp)에서 현재 페이지 번호를 Controller(list)에 전달,
Controller는 Pagemaker클래스에 접근하여 페이지 계산.
pagemaker.java
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
if (page < 1) {
this.page = 1;
return;
}
this.page = page;
}
public void setCount(Integer count) {
if (count < 1) {
return;
}
this.count = count;
System.out.println("총 컬럼 갯수 = "+count);
calcPage();
}
private void calcPage() {
// page변수는 현재 페이지번호
int tempEnd = (int)(Math.ceil(page / 10.0) * 10);
// 현재 페이지번호를 기준으로 끝 페이지를 계산한다.
System.out.println("page = " +page);
System.out.println("tempEnd = "+tempEnd);
System.out.println("this.count =" +this.count);
// 시작 페이지 계산
this.start = tempEnd - 9;
if (tempEnd * 10 > this.count) { // 가상으로 계산한 tempEnd크기가 실제 count보다 많을경우
this.end = (int) Math.ceil(this.count / 10.0);
} else {
this.end = tempEnd; // 실제 count가 tempEnd보다 많을경우
}
System.out.println("this.end = "+this.end);
this.prev = this.start != 1;
this.next = this.end * 10 < this.count;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
if (page < 1) {
this.page = 1;
return;
}
this.page = page;
}
public void setCount(Integer count) {
if (count < 1) {
return;
}
this.count = count;
System.out.println("총 컬럼 갯수 = "+count);
calcPage();
}
private void calcPage() {
// page변수는 현재 페이지번호
int tempEnd = (int)(Math.ceil(page / 10.0) * 10);
// 현재 페이지번호를 기준으로 끝 페이지를 계산한다.
System.out.println("page = " +page);
System.out.println("tempEnd = "+tempEnd);
System.out.println("this.count =" +this.count);
// 시작 페이지 계산
this.start = tempEnd - 9;
if (tempEnd * 10 > this.count) { // 가상으로 계산한 tempEnd크기가 실제 count보다 많을경우
this.end = (int) Math.ceil(this.count / 10.0);
} else {
this.end = tempEnd; // 실제 count가 tempEnd보다 많을경우
}
System.out.println("this.end = "+this.end);
this.prev = this.start != 1;
this.next = this.end * 10 < this.count;
}
페이지 알고리즘 및 현재 페이지를 기준으로 마지막 페이지 , Prev, Next 계산.
list.jsp (일부)
<ul class="pageUL">
<c:if test="${pageMaker.prev }">
<li><a href='list?page=${pageMaker.start -1}'>이전</a></li>
</c:if>
<c:forEach begin="${pageMaker.start }" end="${pageMaker.end}" var="idx">
<li
class='<c:out value="${idx == pageMaker.page?'current':''}"/>'>
<a href='list?page=${idx}'>${idx}</a>
</li>
</c:forEach>
<c:if test="${pageMaker.next }">
<li><a href='list?page=${pageMaker.end +1}'>다음</a></li>
</c:if>
</ul>
<ul class="pageUL">
<c:if test="${pageMaker.prev }">
<li><a href='list?page=${pageMaker.start -1}'>이전</a></li>
</c:if>
<c:forEach begin="${pageMaker.start }" end="${pageMaker.end}" var="idx">
<li
class='<c:out value="${idx == pageMaker.page?'current':''}"/>'>
<a href='list?page=${idx}'>${idx}</a>
</li>
</c:forEach>
<c:if test="${pageMaker.next }">
<li><a href='list?page=${pageMaker.end +1}'>다음</a></li>
</c:if>
</ul>
서버에서 계산된 페이지값을 받아서 화면(Web)에 출력 부분입니다.
시연동영상
페이지 번호 및 페이지 이동을 확인 할 수 있다.
'Spring' 카테고리의 다른 글
Spring Framework 란? (0) | 2016.10.20 |
---|---|
[Spring] 스프링 부트(Spring Boot) 프로젝트 생성 시 오류 (0) | 2016.08.24 |