안녕하세요?
MelonPeach입니다.
이전 포스팅에서 검색 기능을 구현하였는데요
이번 포스팅에서는 게시판에서 글쓰기, 수정등 취소 버튼을 눌렀을때
list로 가지면서 페이지와 검색타입, 검색어가 유지되는 기능을 구현하려고 합니다.
1. BoardController 작성
list에서 가져온 SearchCriteria값을 사용하기위해 매개변수에 파라미터를 통해 값을 받고
model을 이용하여 scri를 보내줍니다.
// 게시판 조회
@RequestMapping(value = "/readView", method = RequestMethod.GET)
public String read(BoardVO boardVO, @ModelAttribute("scri") SearchCriteria scri, Model model) throws Exception{
logger.info("read");
model.addAttribute("read", service.read(boardVO.getBno()));
model.addAttribute("scri", scri);
return "board/readView";
}
2. readView 작성
readView.jsp에 들어가서 scri값을 보관하기위해 form태그안에 타입 hidden으로 input태그를 추가해줍니다.
<form name="readForm" role="form" method="post">
<input type="hidden" id="bno" name="bno" value="${read.bno}" />
<input type="hidden" id="page" name="page" value="${scri.page}">
<input type="hidden" id="perPageNum" name="perPageNum" value="${scri.perPageNum}">
<input type="hidden" id="searchType" name="searchType" value="${scri.searchType}">
<input type="hidden" id="keyword" name="keyword" value="${scri.keyword}">
</form>
readView.jsp에서 head태그 아래에 script태그 안에 함수를 만들어줍니다.
// 목록
$(".list_btn").on("click", function(){
location.href = "/board/list?page=${scri.page}"
+"&perPageNum=${scri.perPageNum}"
+"&searchType=${scri.searchType}&keyword=${scri.keyword}";
})
list.jsp에서 a태그를 수정해줍니다.
<a href="/board/readView?bno=${list.bno}&page=${scri.page}&perPageNum=${scri.perPageNum}&searchType=${scri.searchType}&keyword=${scri.keyword}"><c:out value="${list.title}" /></a>
3. BoardController
사진과 같이 추가해줍니다.
BoardController.java에서 게시판 수정뷰, 수정, 삭제 코드를 수정해 줍니다.
// 게시판 수정뷰
@RequestMapping(value = "/updateView", method = RequestMethod.GET)
public String updateView(BoardVO boardVO, @ModelAttribute("scri") SearchCriteria scri, Model model) throws Exception{
logger.info("updateView");
model.addAttribute("update", service.read(boardVO.getBno()));
model.addAttribute("scri", scri);
return "board/updateView";
}
// 게시판 수정
@RequestMapping(value = "/update", method = RequestMethod.POST)
public String update(BoardVO boardVO, @ModelAttribute("scri") SearchCriteria scri, RedirectAttributes rttr) throws Exception{
logger.info("update");
service.update(boardVO);
rttr.addAttribute("page", scri.getPage());
rttr.addAttribute("perPageNum", scri.getPerPageNum());
rttr.addAttribute("searchType", scri.getSearchType());
rttr.addAttribute("keyword", scri.getKeyword());
return "redirect:/board/list";
}
// 게시판 삭제
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public String delete(BoardVO boardVO, @ModelAttribute("scri") SearchCriteria scri, RedirectAttributes rttr) throws Exception{
logger.info("delete");
service.delete(boardVO.getBno());
rttr.addAttribute("page", scri.getPage());
rttr.addAttribute("perPageNum", scri.getPerPageNum());
rttr.addAttribute("searchType", scri.getSearchType());
rttr.addAttribute("keyword", scri.getKeyword());
return "redirect:/board/list";
}
4. updateView 작성
취소버튼의 함수를 추가해줍니다.
$(".cancel_btn").on("click", function(){
event.preventDefault();
location.href = "/board/readView?bno=${update.bno}"
+ "&page=${scri.page}"
+ "&perPageNum=${scri.perPageNum}"
+ "&searchType=${scri.searchType}"
+ "&keyword=${scri.keyword}";
})
5. 실행테스트
테스트를 해봅니다.
톰캣을 실행하여 페이지와 검색타입, 검색어를 입력후 검색버튼 클릭후
글을 조회합니다. 그리고 목록으로 돌아가서 확인해보면 페이지와 검색타입, 검색어가 유지됩니다.
다음 포스팅에서는 댓글 구현을 해보려고합니다.