Spring 일지 #10 (20210914) 화면 구현(이전글, 다음글)
10. 이전글, 다음글 구현
-참고 사이트(4.4.5, 6.3.2 참고)
https://docs.spring.io/spring-data/jpa/docs/2.3.7.RELEASE/reference/html/#reference
-이전글, 다음글 구현
*이전글, 다음글 변수 등록(BoardRepository.java)
**이전글은 Desc (내림차순), 다음글은 Asc(오름차순) 을 이용한다.
//이전글 (현재글 20 이면 작은 것 중에서 가장 큰 것 1개)
Board findTop1ByNoLessThanOrderByNoDesc(long no);
//다음글 (현재글 20 이면 큰 것 중에서 가장 작은 것 1개)
Board findTop1ByNoGreaterThanOrderByNoAsc(long no);
*이전글, 다음글 등록하기(BoardController.java)
// 127.0.0.1:8080/ROOT/board/select_one?no=13
@RequestMapping(value = "/select_one", method = RequestMethod.GET)
public String selectOne(
@RequestParam(name = "no", defaultValue = "0") long no,
Model model) {
System.out.println(no);
if(no == 0) { //파라미터가 전달되지 못했음.
return "redirect:select";
}
Optional<Board> obj = bRepository.findById(no);
if(obj.isPresent()){
Board board = obj.get();
//이전글
Board board2 = bRepository.findTop1ByNoLessThanOrderByNoDesc(no);
//다음글
Board board3 = bRepository.findTop1ByNoGreaterThanOrderByNoAsc(no);
if(board2 == null){ -> 이전글이 없다면 prev 의 값을 0으로 출력
model.addAttribute("prev", 0);
}
else {
model.addAttribute("prev", board2.getNo());
}
if(board3 == null){ -> 다음글이 없다면 next의 값을 0으로 출력
model.addAttribute("next", 0);
}
else{
model.addAttribute("next", board3.getNo());
}
model.addAttribute("board", board);
}
return "board_select_one";
}
*구현하기(board_select_one.jsp)
** 기존의 이전글, 다음글 버튼을 a 태그로 감싼다.
**controller에서 이전, 다음글이 없다면 prev, next 를 0으로 출력하도록 했기 때문에 no=0 이 된다.
<a th:if="${prev != 0}" th:href="@{/board/select_one(no=${prev})}"><input type="button" value="이전글" /></a>
<a th:if="${next != 0}" th:href="@{/board/select_one(no=${next})}"><input type="button" value="다음글" /></a>
*화면 확인
*마지막 글, 처음 글을 확인하면 다음글, 이전글 버튼이 없어졌음를 확인할 수 있다.