SPRING

POST-Redirect-GET (PRG) 패턴

silver-w 2024. 11. 30. 22:05

RedirectAttributes 개념


리다이렉션 수행시, 한 컨트롤러 메서드에서 다른 컨트롤러 메서드로 Attributes를 전달하는데 이용한다.

 

데이터 저장시에는 redirectAttributes.addAttribute() 또는 redirectAttributes.addFlashAttributes()를 사용한다.

  • 주문이 완료된 후 주문 결과 상세 페이지로 Redirect하고, 그 결과를 보여주고 싶을때, 주문 처리가 끝났을 때 생성된 주문번호를 리 다이렉트 페이지로 넘길 수 있다. 
     -> 위와 같이 노출해도 상관없는 정보를 넘길때는 redirectAttributes.addAttribute()로 전달한다.
  • 리다이렉트 시, 노출하기 싫은 정보를 숨길때 addFlashAttributes로 Session을 사용하여 redirect의 정보를 저장했다가 redirect 이후에 정보를 바로 삭제하는 일시적 데이터를 저장한다.

 

 

비밀번호 확인 후, 비밀번호 변경 페이지로 넘어가는 코드 (addFlashAttributes 사용)


 

<HTML 코드>

<form id="checkPwForm" method="post" action="${pageContext.request.contextPath}/customer/postModifyCustomerPw">
	<!-- 변경할 비밀번호 -->
    <label class="form-label">PassWord :</label> 
    <input id="checkPw" name="checkPw" type="password" class="form-control" placeholder="비밀번호 확인">

    <!-- 원래 비밀번호 -->
    <input id="prePw" name="prePw" type="hidden" value="${customer.customerPw}">
    <button id="modifyCustomerPwBtn" type="button" class="btn btn-sm btn-outline-primary" style="margin-right: 7px;">비밀번호 변경</button>
</form>

 

<컨트롤러>

@PostMapping("/customer/postModifyCustomerPw")
	public String postModifyCustomerPw(@RequestParam String prePw, RedirectAttributes redirectAttributes) {
	    redirectAttributes.addFlashAttribute("prePw", prePw);
	    return "redirect:/customer/modifyCustomerPw";
	}
	
@GetMapping("/customer/modifyCustomerPw")
public String modifyCustomerPw(@ModelAttribute("prePw") String prePw, Model model) {
    model.addAttribute("prePw", prePw);
    return "customer/modifyCustomerPw"; 
}

 

 

# 추가 정리

이번 프로젝트 끝나면 해야할 것

 - flash관련 인터페이스에 대해 알아보기

 - redirectAttributes 를 개발자들은 어떤식으로 쓰는지 코드 리뷰해보기