현재는 이렇게 페이지 개수 전체가 다 출력된다.
BoardController - getListPage에 추가
// 게시물 목록 + 페이징 추가
@GetMapping("/listPage")
public void getListPage(@RequestParam("num") int num, Model model) throws Exception {
//게시물 총 갯수
int count = boardService.count();
//한 페이지에 출력할 게시글 갯수
int postNum = 10;
//하단 페이징 번호([ 게시글 총 갯수 / 한 페이지에 출력할 갯수])의 반올림)
int pageNum = (int)Math.ceil((double)count/postNum);
//출력할 게시글
int displayPost = (num - 1) * postNum;
//한 번에 표시할 페이징 번호의 갯수
int pageNum_cnt = 10;
//표시되는 페이지 번호 중 마지막 번호
int endPageNum =(int)(Math.ceil((double)num/(double)pageNum_cnt) * pageNum_cnt);
//표시되는 페이지 번호 중 첫 번째 번호
int startPageNum = endPageNum -(pageNum_cnt -1);
//마지막 번호 재계산( 총 페이지 숫자보다 클 수 없음)
if(endPageNum > pageNum) {
endPageNum = pageNum;
}
//시작 페이지가 1이면 이전 페이지는 없다. 그 외는 있음.
boolean prev = startPageNum ==1? false : true;
//마지막 페이지가 총 페이지보다 작으면 다음 페이지가 있음.
boolean next = endPageNum < pageNum ? true : false;
List<BoardVO> list = null;
list = boardService.listPage(displayPost, postNum);
model.addAttribute("list", list); //현재 num 페이지의 게시글 데이터
model.addAttribute("pageNum", pageNum); //총 페이지 숫자
// 시작 및 끝 번호
model.addAttribute("startPageNum", startPageNum);
model.addAttribute("endPageNum", endPageNum);
// 이전 및 다음
model.addAttribute("prev", prev);
model.addAttribute("next", next);
}
listPage.jsp
<%-- <c:forEach begin="1" end="${pageNum}" var="num">
<span>
<a href="/board/listPage?num=${num}">${num}</a>
</span>
</c:forEach> --%>
처음에 테스트로 한 반복문은 주석처리 한 후 아래의 코드로 변경
<c:if test="${prev}">
<span>[ <a href="/board/listPage?num=${startPageNum - 1}">이전</a>
]
</span>
</c:if>
<c:forEach begin="${startPageNum}" end="${endPageNum}" var="num">
<span> <c:if test="${select != num}">
<a href="/board/listPage?num=${num}">${num}</a>
</c:if> <c:if test="${select == num}">
<b>${num}</b>
</c:if>
</span>
</c:forEach>
<c:if test="${next}">
<span>[ <a href="/board/listPage?num=${endPageNum + 1}">다음</a>
]
</span>
</c:if>
마지막 페이지
BoardController의 페이징 기능 구현이 길어서
클래스로 따로 만듬
package com.board.domain;
public class Page {
// 현재 페이지 번호
private int num;
// 게시물 총 갯수
private int count;
// 한 페이지에 출력할 게시물 갯수
private int postNum = 10;
// 총 페이지 숫자 ([ 게시물 총 갯수 ÷ 한 페이지에 출력할 갯수 ]의 올림)
private int pageNum;
// 출력할 게시물
private int displayPost;
// 한번에 표시할 페이징 번호의 갯수
private int pageNumCnt = 10;
// 표시되는 페이지 번호 중 마지막 번호
private int endPageNum;
// 표시되는 페이지 번호 중 첫번째 번호
private int startPageNum;
// 다음/이전 표시 여부
private boolean prev;
private boolean next;
//getter setter
//setter는 count랑 num만 생성
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getPostNum() {
return postNum;
}
public int getPageNum() {
return pageNum;
}
public int getDisplayPost() {
return displayPost;
}
public int getPageNumCnt() {
return pageNumCnt;
}
public int getEndPageNum() {
return endPageNum;
}
public int getStartPageNum() {
return startPageNum;
}
public boolean isPrev() {
return prev;
}
public boolean isNext() {
return next;
}
}
getter setter 만들기
public void dataCalc() {
//하단 페이징 번호([ 게시글 총 갯수 / 한 페이지에 출력할 갯수])의 반올림)
pageNum = (int)Math.ceil((double)count/postNum);
//출력할 게시글
displayPost = (num - 1) * postNum;
//표시되는 페이지 번호 중 마지막 번호
endPageNum =(int)(Math.ceil((double)num/(double)pageNumCnt) * pageNumCnt);
//표시되는 페이지 번호 중 첫 번째 번호
startPageNum = endPageNum -(pageNumCnt -1);
//마지막 번호 재계산( 총 페이지 숫자보다 클 수 없음)
if(endPageNum > pageNum) {
endPageNum = pageNum;
}
//시작 페이지가 1이면 이전 페이지는 없다. 그 외는 있음.
prev = startPageNum ==1? false : true;
//마지막 페이지가 총 페이지보다 작으면 다음 페이지가 있음.
next = endPageNum < pageNum ? true : false;
}
BoardController 수정
// 게시물 목록 + 페이징 추가
@GetMapping("/listPage")
public void getListPage(@RequestParam("num") int num, Model model) throws Exception {
int count = boardService.count();
Page page = new Page();
page.setNum(num);
page.setCount(count);
page.dataCalc();//페이지와 총게시글로 계산하기
List<BoardVO> list = boardService.listPage(page.getDisplayPost(), page.getPostNum());
model.addAttribute("list", list); //현재 num 페이지의 게시글 데이터
model.addAttribute("pageNum", page.getPageNum()); //총 페이지 숫자
// 시작 및 끝 번호
model.addAttribute("startPageNum", page.getStartPageNum());
model.addAttribute("endPageNum", page.getEndPageNum());
// 이전 및 다음
model.addAttribute("prev", page.getPrev());
model.addAttribute("next", page.getNext());
//현재 선택한 페이지
model.addAttribute("select", num);
}
테스트하기
BoardController 의 page 객체를 줄여서 사용가능함.
// 게시물 목록 + 페이징 추가
@GetMapping("/listPage")
public void getListPage(@RequestParam("num") int num, Model model) throws Exception {
int count = boardService.count();
Page page = new Page();
page.setNum(num);
page.setCount(count);
page.dataCalc();//페이지와 총게시글로 계산하기
List<BoardVO> list = boardService.listPage(page.getDisplayPost(), page.getPostNum());
model.addAttribute("list", list); //현재 num 페이지의 게시글 데이터
model.addAttribute("page", page); // 페이지 객체
model.addAttribute("select", num);//현재 선택한 페이지
}
listpage.jsp
수정
<c:if test="${page.prev}">
<span>[ <a href="/board/listPage?num=${page.startPageNum - 1}">이전</a>
]
</span>
</c:if>
<c:forEach begin="${page.startPageNum}" end="${page.endPageNum}" var="num">
<span> <c:if test="${select != num}">
<a href="/board/listPage?num=${num}">${num}</a>
</c:if> <c:if test="${select == num}">
<b>${num}</b>
</c:if>
</span>
</c:forEach>
<c:if test="${page.next}">
<span>[ <a href="/board/listPage?num=${page.endPageNum + 1}">다음</a>
]
</span>
</c:if>
정상 출력 확인
'BACKEND > Spring' 카테고리의 다른 글
게시판 만들기 - 댓글 DB에 테이블 추가, 게시글 댓글 조회 (0) | 2023.10.25 |
---|---|
게시판 만들기 - 검색 기능 (0) | 2023.10.24 |
게시판 만들기 - 페이징 기능 구현 (1) | 2023.10.24 |
게시판 만들기 - 조회수 증가(UPDATE) 기능 추가 (0) | 2023.10.24 |
게시판 만들기 - 삭제하기 기능 추가 (0) | 2023.10.24 |