• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

16강 질문입니다.

22.06.27 01:47 작성 조회수 128

0

강사님 안녕하세요.

16강 질문 있습니다.

 

delete 이후에 alert 메세지를 띄우기 위해서 RedirectAttributes rttr을 파라미터로 하나 선언하고

rttr.addFlashAttribute("msg",  "삭제되었습니다.") 이후에 view에서 {{msg}} 받도록 되어 있는데

그냥 Model model 을 파라미터로 두고 

model.addAttribute("msg", "삭제되었습니다.")

view {{msg}} 

이렇게 받으면 안되나요 ? 어차피 view에서는 전달받은 객체의 변수를 가져만 오는 거고 addFlashAttribute setAttribute가 클래스 내부적으로는 map 으로 구성되어 있겠지만 둘 다 string으로 되어 있으니 다른 점 있을까 싶어서요.

 

그리고 예전 스프링에서 보면 view에 해당하는 jsp 파일들은 실제로 서블릿으로 동작하고, requestDispatcher -> forward를 통해 넘겨진 request, response 객체들이 동작되어서 jsp 페이지에서 변수처리가 가능한데 이것도 같은 동작방식이라 이해하면 될까요 ? 
그렇다면 예를 들어

public String delete(RedirectsAttribute rtts, Model model){

rtts.addFlashAttribute("msg", "삭제되었습니다.");

model.addAttribute("msg", "삭제되었습니다(모델)");

return "test";

}

하였을 때 test 뷰에서 {{msg}} 이렇게 받으면 결과가 어떻게 나오나요 ? 
이 때의 동작방식은 어떻게 되는지 설명 부탁드립니다.

 

감사합니다.

답변 1

답변을 작성해보세요.

0

리다이렉트 시,
모델 객체에 등록된 값은 사라지게 됩니다.
이는 HTTP의 Stateless 특성 때문인데요

이로 인해,
model.addAttribute()로 등록된 값을
리다이렉트된 페이지에서 사용할 수 없습니다.

예시로 든 "test.mustache" 페이지에서는
리다이렉트 방식이 아니므로
모델에 등록된 값 "삭제되었습니다.(모델)"이 보여지게 됩니다.

(리다이렉트가 아닌
forward로 호출된 경우엔
model의 값을 그대로 사용할 수 있습니다.)

 

PS.

삭제 후, 리다이렉트하는 것이
포워딩하는 것 보다 일반적인 방식(선호방식)입니다.

질문과 함께 예시로 든 코드를
직접 수행해보세요.