페이징 처리2 게시물과 이어지는 내용입니다.
2021.07.20 - [Spring/게시판프로젝트] - [Spring] 게시판 프로젝트14 - 페이징 처리2
그리고 get페이지의 목록 버튼은 사실상 뒤로가기와 의미가 같아서 그냥 삭제했다.
이번 게시물에서는 삭제되었을 때 페이지 정보가 같이 이동하도록 처리해보겠다.
수정 페이지에서 삭제 버튼을 눌러 게시글을 삭제하게되면,
아래의 url처럼 파라미터가 없는 상태로 리스트의 가장 첫페이지로 이동한다.
그럼 우리는 삭제 작업을 한 뒤 리스트로 이동할 때 파라미터를 전달하는 작업만 처리하면 된다.
이미 수정페이지가 pageNum과 amount의 정보를 가지고 있으니 Form 전송을 해줄 때 hidden속성으로 pageNum과 amount 정보를 함께 전달해준다.
<form action="/board/modify" method="post">
<input type="hidden" name="pageNum" value="<c:out value='${cri.pageNum}'/>">
<input type="hidden" name="amount" value="<c:out value='${cri.amount}'/>">
....
</form>
수정, 삭제를 다루는 컨트롤러는 아래에서 확인할 수 있다. 아래는 전체코드를 적어놓았다.
// 실제로 게시물을 수정하는 경우
@PostMapping("/modify")
public String modify(BoardVO board, @ModelAttribute("cri") Criteria cri, RedirectAttributes rttr) {
log.info("[ CONTROLLER ] modify:" + board);
if (service.modify(board)) {
rttr.addFlashAttribute("result", "success");
}
rttr.addAttribute("pageNum", cri.getPageNum());
rttr.addAttribute("amount", cri.getAmount());
return "redirect:/board/list";
}
//삭제
@PostMapping("/remove")
public String remove(@RequestParam("bno") Long bno, @ModelAttribute("cri") Criteria cri, RedirectAttributes rttr) {
log.info("[ CONTROLLER ] remove..." + bno);
if (service.remove(bno)) {
rttr.addFlashAttribute("result", "success");
}
log.info(cri.getPageNum());
rttr.addAttribute("pageNum", cri.getPageNum());
rttr.addAttribute("amount", cri.getAmount());
return "redirect:/board/list";
}
이 코드에서 새롭게 알게된 점은 @RequestParam()와 @ModelAttribute의 차이점이다.
👇 아래의 포스팅에서 참고했당
https://galid1.tistory.com/769
요약해서 말하자면, @RequestParam은 1:1매핑, @ModelAttribute은 객체 매핑을 할 때 사용한다.
@RequestParam("bno") Long bno의 경우에는 /remove?bno=5를 요청하면 Long형의 bno에 5라는 값이 매핑되는 것이고, 비슷한 원리로 @ModelAttribute("cri") Criteria cri의 경우에는 /remove?pageNum=4&amount=10을 요청하면 Criteriar객체의 멤버에 맞게 매핑되는 것이다. (물론 post방식으로 진행하기 때문에 실제로 url에 보이진 않는다.)
그래서 @RequestParam으로 받아온 bno값은 service.remove(bno)처리를 위해 사용하였고, @ModelAttribute로 받아온 cri값은 페이징 처리를 위해 rttr에 addAttribute해주었다.
이후 페이지 정보를 파라미터로 전달하여 마지막으로 확인된 페이지 정보로 redirect한다.
MyBatis에서 전체 데이터의 개수 처리
BoardMapper.java에 메소드를 추가해준다.
public int getTotalCount(); //count
BoardMapper.xml에 count를 구하는 sql을 추가한다.
<select id="getTotalCount" resultType="int">
<![CDATA[
select count(*) from tbl_board where bno > 0
]]>
</select>
BoardService.java
public int getTotal();
BoardServiceImpl.java
@Override
public int getTotal() {
return mapper.getTotalCount();
}
컨트롤러에서 기존에 작성했던 부분 중 total값을 임의로 123이라고 넣어주었는데 그 부분에 실제 데이터 수를 반환하는 service.getTotal()로 변경한다.
BoardController.java
@GetMapping("/list") // 조회하는 경우에는 get방식을 사용
public void list(Criteria cri, Model model) {
log.info("[CONTROLLER]get list..." + cri);
model.addAttribute("list", service.getList(cri));
model.addAttribute("pageMaker", new PageDTO(cri, service.getTotal())); //여기!
}
넘무나도 쉬운 페이징처리! 끝!
'Spring > 게시판프로젝트' 카테고리의 다른 글
[Spring] 게시판 프로젝트17 - 검색기능2 (화면 처리) (0) | 2021.08.10 |
---|---|
[Spring] 게시판 프로젝트16 - 검색기능1 (MyBatis처리) (2) | 2021.08.08 |
[Spring] 게시판 프로젝트14 - 페이징 처리2 (0) | 2021.07.20 |
[Spring] 게시판 프로젝트13 - 페이징 처리1 (0) | 2021.07.20 |
[Spring] 게시판 프로젝트12 - 게시물 수정, 삭제 (0) | 2021.07.14 |
댓글