오봉이와 함께하는 개발 블로그
게시판 검색 페이징 - 쿼리스트링 본문
728x90
문제
공지사항 게시판
에 들어가면 페이징은 되었지만, 검색 조건(제목, 작성자)을 넣고 검색 하면 view에서 다시 랜더링 했을 때 검색 조건에 따라 페이징 링크가 만들어지지 않아 다음 페이지를 클릭하면 엉뚱한 페이지가 나왔다.
- http://localhost:8080/noticePage 접속
- 검색 조건 - 제목 : pring
- 검색 성공
- 다음 페이지(2페이지) 클릭 시 http://localhost:8080/noticePage/?page=1로 접속되는 문제.
해결
form을 통해 검색 조건과 내용을 넘겨주고 같은 주소로 매핑된 컨트롤러에서 검색 조건(selectorParam
)과 내용(Param
)을 넘겨받아서 model
에 값을 추가해서 view로 다시 넘겨준다.
view에서 전달 받은 검색 조건과 내용이 공백이 아니면 새로운 페이징 리스트를 만들고 총 페이지와(totalPages
) 검색 조건, 내용를 담은 링크를 생성한다.
코드
@GetMapping("/notice")
public String viewNoticePageBoard(@PageableDefault(size = 15) Pageable pageable, NoticeCondition condition, Model model,
@RequestParam(value = "selectorParam", required = false, defaultValue = "") String selectorParam,
@RequestParam(value = "parameter", required = false, defaultValue = "") String parameter) {
if (selectorParam.equals("writer")) {
condition.setId(parameter);
} else {
condition.setTitle(parameter);
}
Page<NoticePageDto> noticeTitleOrId = noticeService.findNoticeTitleOrId(pageable, condition);
int totalPages = noticeTitleOrId.getTotalPages();
log.info("totalPages = {}", totalPages);
model.addAttribute("pageDto", noticeTitleOrId);
model.addAttribute("totalPages", totalPages);
model.addAttribute("selectorParam", selectorParam);
model.addAttribute("parameter", parameter);
return "notice/noticeBoard";
}
<!-- 검색 조건이 없을 때 -->
<div class="pagination" th:if="${selectorParam} == '' and ${parameter} == ''">
<ul>
<li th:each="page : ${#numbers.sequence(0, totalPages - 1)}">
<a th:href="@{/noticePage/(page=${pageStat.index})}" th:text="${pageStat.index + 1}"></a>
</li>
</ul>
</div>
<!-- 검색 조건이 있을 때 -->
<div class="pagination" th:if="${selectorParam} != '' and ${parameter} != ''">
<ul>
<li th:each="page : ${#numbers.sequence(0, totalPages - 1)}">
<a th:href="@{/noticePage(page=${pageStat.index}, selectorParam=${selectorParam}, parameter=${parameter})}" th:text="${pageStat.index + 1}"></a>
</li>
</ul>
</div>
<!-- form -->
<div class="search-area">
<form action="noticeBoard.html" th:action method="get">
<select class="form-control" id="selector" name="selector">
<option value="title">제목</option>
<option value="writer">작성자</option>
</select>
<input type="hidden" id="selectorParam" name="selectorParam">
<input type="text" id="parameter" name="parameter">
<input type="submit" value="검색" id="search-btn">
</form>
</div>
728x90
'Artineer 리뉴얼 프로젝트' 카테고리의 다른 글
JPA 연관관계 삭제 (0) | 2022.11.04 |
---|---|
object references an unsaved transient instance - save the transient instance before flushing (Cascade 오류) (0) | 2022.10.19 |
비밀번호 찾기 이메일 전송 [JavaMailSender(SimpleMailSender, MimeMessage)] (0) | 2022.09.28 |
보완할 기능 (0) | 2022.09.27 |
Interceptor 적용 (0) | 2022.09.27 |
Comments