본문 바로가기
Spring/게시판프로젝트

[Spring] 게시판 프로젝트15 - 페이징 처리3

by 태옹 2021. 8. 7.

페이징 처리2 게시물과 이어지는 내용입니다.

2021.07.20 - [Spring/게시판프로젝트] - [Spring] 게시판 프로젝트14 - 페이징 처리2

 

[Spring] 게시판 프로젝트14 - 페이징 처리2

페이징 처리1 게시물과 이어지는 내용입니다. 2021.07.20 - [Spring/게시판프로젝트] - [Spring] 게시판 프로젝트13 - 페이징 처리1 [Spring] 게시판 프로젝트13 - 페이징 처리1 프로젝트용으로 데이터가 그렇

taetoungs-branch.tistory.com

 

그리고 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

 

Spring MVC - @ModelAttribute의 장점(@RequestParam와 @ModelAttribute)

이번 시간에는 사용자의 전달값을 핸들러의 매개변수로 매핑할때 사용되는 @RequestParam 과 @ModelAttribute 에 대해 알아보도록 하겠습니다. 1. 사용법과 예제 우선 각각의 어노테이션의 사용법과 예

galid1.tistory.com

 

 

요약해서 말하자면, @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()));	//여기!
}

 

넘무나도 쉬운 페이징처리! 끝!

 

댓글