PRG 패턴

강한친구·2022년 5월 3일
0

Spring

목록 보기
15/27

Post Redirect Get

전체적인 흐름

  1. GET 으로 상품등록 Form을 가져옴
  2. 등록버튼을 누르면 POST로 저장이 되고, 상품 상세 뷰가 호출된다.
  3. 웹브라우저 입장에서는 내가 마지막에 POST ADD를 요청한것이 되는것이다.
  4. 이 때, 새로고침을 누르면, 마지막에 내가 요청한 POST가 다시 호출되고, 등록이 하나 더 된다.

해결책

Post로 저장한 후에, Redirect를 통해 상품상세로 보내버리는것이다. 그러면 마지막에 호출한게 Redirect이기때문에 새로고침을 해도 아무 문제가 생기지 않는다.

        return "redirect:/basic/items/" + item.getId();

이런식으로 Redirect를 해주면 Post처리 후 itemid의 상세페이지로 redirect 된다.

Redirect Attribute

    @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}";

RedirectAttribute에 ItemId Attribute를 넣어주고, 동시에 Status를 줄 수 있다.

이 Status를 통해서 상세 페이지뷰에서 status에 따라 출력을 하게 만들 수 있다 .

    <h2 th:if="${param.status}" th:text="'저장 완료!'"></h2>

0개의 댓글