이제 저장이 잘 되었으면 상품 상세 화면에 "저장되었습니다."라는 메시지를 보여주게 해보자.
addItemV5에 있던 PostMapping는 주석처리 해주고
V6를 만들어 주자.
// @PostMapping("/add")
public String addItemV5(Item item) {
itemRepository.save(item);
return "redirect:/basic/items/" + item.getId();
}
@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를 추가해주고
url에서 {itemId}가 3으로 치환이 되고 남은거 ?status = true는 쿼리 파라미터로 넘어간다.
http://localhost:8080/basic/items/3?status=true라는 리다이렉트 결과가 나온다.
RedirectAttributes
RedirectAttributes 를 사용하면 URL 인코딩도 해주고, pathVarible , 쿼리 파라미터까지 처리해준다.
- redirect:/basic/items/{itemId}
- pathVariable 바인딩: {itemId}
- 나머지는 쿼리 파라미터로 처리: ?status=true
뷰 템플릿에서 이 값이 있다면 저장되었습니다라는 메시지를 출력해주자.
template - basic 패키지에 있는 item.html 파일로 가서 아래 구문을 추가해주면 저장완료라는 문구가 뜬다.
<!-- 추가 -->
<h2 th:if="${param.status}" th:text="'저장 완료'"></h2>
- th:if : 해당 조건이 참이면 실행
- ${param.status} : 타임리프에서 쿼리 파라미터를 편리하게 조회하는 기능
- 원래는 컨트롤러에서 모델에 직접 담고 값을 꺼내야 한다. 그런데 쿼리 파라미터는 자주 사용해서 타임리프에서 직접 지원한다.
- 뷰 템플릿에 메시지를 추가하고 실행해보면 "저장 완료!" 라는 메시지가 나오는 것을 확인할 수 있다.
<출처 김영한: 스프링 MVC 1편 - 벡앤드 웹 개발 핵심 기술>
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의
웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -
www.inflearn.com
'Spring > SpringMVC' 카테고리의 다른 글
PRG Post/Redirect/Get (0) | 2022.05.05 |
---|---|
상품 수정 (0) | 2022.05.04 |
상품 등록 처리 - @ModelAttribute (0) | 2022.05.04 |
상품 상세, 상품 등록 폼 뷰 & 컨트롤러 (0) | 2022.05.03 |
상품 목록 - 타임리프 (0) | 2022.05.03 |