상품을 저장하고 상품 상세 화면으로 리다이렉트 한 것 까지는 좋았다.
하지만 고객 입장에서 저장이 잘 된것인지 안 된것인지 확신이 들지 않음
그래서 저장이 잘 되었으면 상품 상세화면에 "저장되었다"라는 메세지를 보여달라는 요구사항이 왔다.
@PostMapping("/add")
public String addItemV6(Item item, RedirectAttributes redirectAttributes){
Item savedItem = itemRepository.save(item);
redirectAttributes.addAttribute("itemId",savedItem.getId());
redirectAttributes.addAttribute("status",true);
return "redirect:/basic/items/{itemId}";
}
리다이렉트 할 때 간단히 status=true
를 추가해보자
그리고 뷰 템플릿에서 이 값이 있으면, 저장되었다는 메세지 출력
실행해보면 다음과 같은 리다이렉트 결과가 나온다.
http://localhost:8080/basic/items/3?status=true
RedirectAttribute
를 사용하면 URL 인코딩도 해주고, PathVariable
, 쿼리 파라미터까지 처리해준다.
Redirect:/basic/items/{itemId}
{itemId}
?status=true
resources/template/basic/item.html
<div class="container">
<div class="py-5 text-center">
<h2>상품 상세</h2> </div>
<!-- 추가-->
<h2 th:if="${param.status}" th:text="'저장완료'"></h2>
th:if
: 해당 조건이 참이면 실행
${param.status}
: 타임리프에서 쿼리 파라미터를 편리하게 조회하는 기능
뷰 템플릿에 메세지를 추가하고 실행해보면 "저장 완료!" 메세지가 나온다
물론 상품 목록에서 상품 상세로 이동한 경우 해당 메세지가 나오지 않는다.