앞서 만든 게시판에서 등록된 글을 삭제하는 기능을 구현하기
<a href="/articles/{{article.id}}/delete" class="btn btn-danger">Delete</a>
@GetMapping("/articles/{id}/delete")
public String delete(@PathVariable Long id, RedirectAttributes rttr) {
log.info("삭제 요청이 들어왔습니다!");
Article target = articleRepository.findById(id).orElse(null);
log.info(target.toString());
if(target!=null) {
articleRepository.delete(target);
rttr.addFlashAttribute("msg", "삭제됐습니다!");
}
return "redirect:/articles";
}
@GetMapping("/articles/{id}/delete")
public String delete(@PathVariable Long id, RedirectAttributes rttr)
RedirectAttributes
- 리다이렉트할 때 데이터를 안전하게 넘기기 위해 사용
- 뷰 페이지에서 데이터를 넘길 때는 보통 Model을 사용.
- 하지만 return 에서 redirect(리다이렉트)를 사용하면 다시 다른 URL으로 이동(새로운 요청 발생)하기 때문에 일반 Model을 넣은 값은 리다이렉트 후 사라져서 전달되지 않음.
Article target = articleRepository.findById(id).orElse(null);
if(target!=null) {
articleRepository.delete(target);
rttr.addFlashAttribute("msg", "삭제됐습니다!");
}
addFlashAttribute 메서드 사용public String delete(@PathVariable Long id, RedirectAttribute rttr) { rttr.addFlashAttribute(넘겨 주려는 키 문자열, 넘겨 주려는 값 객체);
addFlashAttribute는 리다이렉트 후 1회성 메시지를 전달하고 싶을 때 사용
addFlashAttribute("msg", "삭제됐습니다!"); -> msg라는 키 문자열에 "삭제됐습니다!" 라는 값 메세지 넣음.{{#msg}}
<div class="alert alert-primary alert-dismissible">
{{msg}}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{{/msg}}