버튼 만들기
→ 이전페이지 , 페이지 갯수 , 다음페이지
- 클래스 PageMakerDTO 생성
/* 시작 페이지 */
private int startPage;
/* 끝 페이지 */
private int endPage;
/* 이전 페이지, 다음 페이지 존재유무 */
private boolean prev, next;
/*총 게시물 수*/
private int totalPost;
/* 현재 페이지, 페이지당 게시물 표시수 정보 */
private Criteria cri;
생성자는 totalPost, cri만 해준다
public PageMakerDTO(int totalPost, Criteria cri) {
this.totalPost = totalPost;
this.cri = cri;
this.endPage = (int)(Math.ceil(cri.getPageNum()/10.0))*10;
this.startPage = this.endPage -9;
int realEnd = (int)(Math.ceil(totalPost * 1.0/cri.getAmount()));
if(realEnd < this.endPage) {
this.endPage = realEnd;
}
}
- 마지막 페이지(endPage) 계산법 = (int)(Math.ceil(cri.getPageNum()/10.0))*10;
Math.ceil() : 소수점을 정수로 올림.
ceil(1~10 / 10 )
0.1~0.9 는 올려서 1이고 *10 하면 10
마지막 페이지는 1~10 => 10 , 11~20 => 20
- 시작 페이지 계산법(startPage) = this.endPage -9;
1페이지 = 마지막 페이지에서 -9
- 실제 끝 페이지 계산법(realEnd) = int)(Math.ceil(totalPost * 1.0/cri.getAmount()));
총 200개 / 한페이지당 20개 = 마지막페이지 10
총 201개 / 한페이지당 20개 = Math.ceil(10.1) 마지막페이지 11
- 실제 끝 페이지보다 < 마지막 페이지가 많을 경우 = 실제 끝페이지가 마지막페이지로
(총게시글이 50개밖에 없는데 마지막 페이지가 10일 수가 없으니까)
if(realEnd < this.endPage) {
this.endPage = realEnd;
}
- '<' 이전버튼 이전페이지로 = this.prev = this.startPage > 1;
첫페이지가 1 이상일 때 나타나도록
- '>' 다음버튼 다음페이지로 = this.next = this.endPage < realEnd;
11~20페이지에서 마지막 20페이지이고 실제 끝페이지는 21이다
그러면 다음 페이지버튼 나타나도록
getter,setter , toString() 자동생성하기
totalPost값은 구하도록 mapper에 추상 메서드 추가하기
/* 게시글 총 갯수 */
public int getTotalPost();
총 게시글 갯수를 세서 리턴하도록
mapp.xml
<!-- 게시물 총 개숫 -->
<select id="getTotalPost" resultType="int">
select count(*) from recipe
</select>
mapper 테스트해보기
/* 총 게시글 수*/
int result = recipeMapper.getTotalPost();
log.info("총 게시글 수 : " +result);
serviceImpl
@Override
public int getTotalPost() {
return recipeMapper.getTotalPost();
}
Controller
@GetMapping("/list")
public String recipeListGet(Model model, Criteria criteria) {
model.addAttribute("boardList", recipeService.getListPaging(criteria));
int totalPost = recipeService.getTotalPost();
PageMakerDTO pmk = new PageMakerDTO(totalPost, criteria);
model.addAttribute("pmk", pmk);
return "recipe_list";
}
totalPost, criteria 두개값만 안다면 시작페이지, 마지막페이지, 실제끝페이지 등등 모두 계산 가능.
view 에 페이지 번호 html
table끝나고 다음부분에 추가
<nav aria-label="Page navigation" th:if="${pmk.endPage > 0}">
<ul class="pagination justify-content-center mt-5">
<li class="page-item" th:if="${pmk.prev}">
<a class="page-link" href="javascript:;" aria-label="이전">
<span class="material-icons"> < </span>
<span class="sr-only">이전</span>
</a>
</li>
<li class="page-item" th:each="number : ${#numbers.sequence(1,pmk.endPage)}">
<a class="page-link" th:href="@{/recipe/board/list}+'?pageNum=__${number}__'" th:text="${number}"></a>
</li>
<li class="page-item" th:if="${pmk.next}">
<a class="page-link" href="javascript:;" aria-label="다음">
<span class="material-icons"> > </span>
<span class="sr-only">다음</span>
</a>
</li>
</ul>
</nav>
* justify-content-center mt-5 : 가운데 정렬
- 번호누를때 페이지 넘겨야함
th:href="@{/board/list}+'?pageNum=__${number}__'" 페이지 넘버가 동적으로 넘어가도록 언더바 두번
☆ 이중으로 변수가 들어갈 경우 __${변수}__
- pageNum 현재넘버가 number와 같으면 색표시
th:classappend="${pmk.criteria.pageNum == number} ? 'active':'' "
- th:if="${pmk.endPage > 0} : 마지막 페이지가 1이상이면
- th:each="number : ${#numbers.sequence(1,pmk.endPage) : 1~마지막 페이지까지 반복
sequence( 1 , pmk.endPage ) : 1~마지막 페이지까지
<li class="page-item" th:if="${pmk.prev}">
<a class="page-link" th:href="@{/recipe/board/list}+'?pageNum=__${pmk.startPage-1}__'"><span class="material-icons"> < </span><span class="sr-only">이전</span></a>
</li>
- 이전, 다음 버튼의 부모태그의 li 태그에 th:if = true면 a태그 이전,다음 버튼 나오도록
th:if="${pmk.prev}"
th:if="${pmk.next}"
private boolean prev, next; 로 정의했기 때문에 무조건 true가 된다.
- 이전 < 버튼의 a 태그에는
th:href="$@{board/list}+'?pageNum=__${pmk.startPage-1}__'"
첫 페이지의 11페이지일 때 이전페이지 누르면 1~10페이지네이션
(1페이지 -1 = 0은 없으니까 11페이지부터 가능)
- 다음 > 버튼의 a 태그에는
th:href="@{/recipe/board/list}+'?pageNum=__${pmk.endPage+1}__'"
마지막 페이지 10페이지에서 다음페이지 누르면 11페이지~ 나오게
그럼 1부터 endPage 가 아니라 startPage~endPage까지 반복하기
th:each="number : ${#numbers.sequence(pmk.startPage,pmk.endPage)}"
'Spring boot | 쇼핑몰 만들기 | 어글리 마켓 > 홈페이지 만들기 | 고객,관리자' 카테고리의 다른 글
[레시피] 주제별 검색 기능 (0) | 2022.05.30 |
---|---|
[레시피] 검색 기능 구현하기 (0) | 2022.05.17 |
[레시피] 게시판 페이지네이션 Criteria (0) | 2022.05.17 |
[레시피] 게시글 삭제 기능 (0) | 2022.05.17 |
[레시피]게시판 글 수정 기능 (0) | 2022.05.17 |