1. 검색 버튼
<form class="form-inline" action="/" method="GET">
<input class="form-control mr-sm-2" type="text" name="search" placeholder="게시글 검색">
<button class="btn btn-primary" type="submit" >검색</button>
</form>
2. BoardController
@GetMapping({"","/","/?search={search}&page={page}"})
public String index(String search, Model model, Criteria cri) {
PageMaker pageMaker = new PageMaker();
if(search == null) {
pageMaker.setCri(cri);
pageMaker.setTotalCount(boardService.게시글갯수()); // 총 게시글의 수
List<Board> boards = boardService.현재페이지(cri);
model.addAttribute("search",search);
model.addAttribute("boards", boards);
model.addAttribute("curPageNum", cri.getPage());
model.addAttribute("pageMaker", pageMaker);
} else {
pageMaker.setCri(cri);
pageMaker.setTotalCount(boardService.검색게시글갯수(search));
List<Board> searchBoards = boardService.검색목록(search, cri);
model.addAttribute("search",search);
model.addAttribute("boards", searchBoards);
model.addAttribute("curPageNum", cri.getPage());
model.addAttribute("pageMaker", pageMaker);
}
return "index"; // viewResolver 작동!!
}
- 페이징 처리(이전 글 참고)를 하고 search값을 받아서 null값이 아닌경우 검색된 게시글의 갯수와 검색목록을 가져온다.
3. BoardService
@Transactional
public int 검색게시글갯수(String search) {
return boardRepository.findByTitleCount(search);
}
@Transactional
public List<Board> 검색목록(String search, Criteria cri){
return boardRepository.findByTitle(search, cri.getPageStart(), cri.getPerPageNum());
}
4. BoardRepository
@Query(value= "SELECT * FROM board b WHERE b.title LIKE %:title% ORDER BY b.id DESC LIMIT :start, :page", nativeQuery = true)
List<Board> findByTitle(@Param("title") String search, @Param("start") int startPage, @Param("page") int pageSize);
@Query(value= "SELECT count(*) FROM board b WHERE b.title LIKE %:title%", nativeQuery = true)
Integer findByTitleCount(@Param("title") String search);
5. index.jsp
<ul class="pagination justify-content-center" style="margin-top:20px;">
<c:choose>
<!-- 검색어가 없을경우 start -->
<c:when test="${empty search}">
<c:choose>
<c:when test="${pageMaker.prev}">
<li class="page-item"><a class="page-link" href="?page=${pageMaker.startPage-1}">Previous</a></li>
</c:when>
<c:otherwise>
<li class="page-item disabled"><a class="page-link" href="?page=${pageMaker.startPage-1}" >Previous</a></li>
</c:otherwise>
</c:choose>
<c:forEach begin="${pageMaker.startPage}" end="${pageMaker.endPage}" var="pageNum">
<c:choose>
<c:when test="${pageNum == curPageNum}">
<li class="page-item active">
<a class="page-link" href="?page=${pageNum}">${pageNum}</a>
</li>
</c:when>
<c:otherwise>
<li class="page-item">
<a class="page-link" href="?page=${pageNum}">${pageNum}</a>
</li>
</c:otherwise>
</c:choose>
</c:forEach>
<c:choose>
<c:when test="${pageMaker.next && pageMaker.endPage > 0}">
<li class="page-item"><a class="page-link" href="?page=${pageMaker.endPage + 1}">Next</a></li>
</c:when>
<c:otherwise>
<li class="page-item disabled"><a class="page-link" href="?page=${pageMaker.endPage + 1}">Next</a></li>
</c:otherwise>
</c:choose>
</c:when>
<!-- 검색어가 없을경우 end -->
<!-- 검색어가 있을경우 start -->
<c:otherwise>
<c:choose>
<c:when test="${pageMaker.prev}">
<li class="page-item"><a class="page-link" href="?search=${search}&page=${pageMaker.startPage-1}">Previous</a></li>
</c:when>
<c:otherwise>
<li class="page-item disabled"><a class="page-link" href="?search=${search}&page=${pageMaker.startPage-1}" >Previous</a></li>
</c:otherwise>
</c:choose>
<c:forEach begin="${pageMaker.startPage}" end="${pageMaker.endPage}" var="pageNum">
<c:choose>
<c:when test="${pageNum == curPageNum}">
<li class="page-item active">
<a class="page-link" href="?search=${search}&page=${pageNum}">${pageNum}</a>
</li>
</c:when>
<c:otherwise>
<li class="page-item">
<a class="page-link" href="?search=${search}&page=${pageNum}">${pageNum}</a>
</li>
</c:otherwise>
</c:choose>
</c:forEach>
<c:choose>
<c:when test="${pageMaker.next && pageMaker.endPage > 0}">
<li class="page-item"><a class="page-link" href="?search=${search}&page=${pageMaker.endPage + 1}">Next</a></li>
</c:when>
<c:otherwise>
<li class="page-item disabled"><a class="page-link" href="?search=${search}&page=${pageMaker.endPage + 1}">Next</a></li>
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
<!-- 검색어가 있을경우 end -->
</ul>
6. 결과
'프로그래밍 > Java' 카테고리의 다른 글
[Java] javadocs SnippetException: Cannot document response fields as the response body is empty 오류 (0) | 2022.02.07 |
---|---|
[Java] java api docs 활용 (0) | 2022.01.17 |
[Java] 게시판 페이징 처리 (0) | 2021.05.20 |
[Java] 게시글 공감기능 추가(tistory버전) (0) | 2021.05.18 |
[Java] 게시글 공유하기 기능 (페이스북, 카카오톡, 트위터) (0) | 2021.05.14 |