수업내용/Spring

[2023.1.17.화] 스프링 MVC 웹 애플리케이션 9 (게시글 수정)

주니어주니 2023. 1. 17. 12:22

 

 

 

@SessionAttributes({" "}), @ModelAttribute(" ") 의 사용 

 

 

* 여러 단계의 폼 입력이 필요한 경우 

 

 

 

원래 컨트롤러의 메소드마다 (OrderForm orderform)을 적어놓으면

-> 스텝별로 이동하면서 컨트롤러에서 OrderForm 객체를 만들어서 폼에 있는 값을 알아서 집어넣음  

-> 근데 문제는, 스텝별로 각각 다른 새로운 OrderForm 객체가 생김

-> model에 "form" 이름으로 OrderForm 객체를 저장 

-> @SessionAttributes({"form"}) : model에 form이라는 이름으로 저장된 객체를 세션객체의 속성으로 바로 저장시킴

-> 요청핸들러 메소드 매개변수를 (@ModelAttribute("form") OrderForm form) 으로 바꿈

-> 요청객체 혹은 세션객체에서 "form"이라는 속성명으로 저장된 객체를 조회 

-> 앞단계에서 세션객체에 "form"이라는 속성명으로 저장된 OrderForm 객체를 가져와서 주문정보를 저장

-> 그 객체에 배송정보, 결제정보 저장 

 

 

 

 


 

* 수정 작업 

 

 

앞의 PostModifyForm에는 수정전 내용이 저장되어 있음

그걸 model에 속성으로 저장 -> 바로 세션객체에 postModifyForm 이라는 이름으로 저장

-> 수정화면에서 수정한 내용들로 제출 -> PostModifyForm에는 수정된 내용이 저장 

-> @ModelAttributes("postModifyForm")을 통해 세션객체에 "postModifyForm"이라는 이름으로 저장된 객체를 조회

-> 변경된 내용이 포함된 PostModifyForm 객체를 서비스로 전달

 

 

 


 

 

게시글 수정폼 

 

 

* PostController

 

 

- @SessionAttributes({"modifyPost"}) : 이 이름으로 세션에 저장

 

 

 

- model 객체에 저장 -> 같은 이름으로 세션에 저장 

 

 

 

 

* PostModifyForm 수정폼 객체 생성 (DetailDto랑 똑같이 만들어줌- 내용만 변경할거야)

 

 

 

* modify-form.jsp 

 

- model 객체에 "modifyPost" 이름으로 저장했으니까 "modifyPost" 이름으로 꺼내기 

- name은 PostmodifyForm의 변수명과 똑같이 -> 그래야 PostmodifyForm 객체가 전달될 때 그 이름에 맞게 값이 들어감

 

 

 

원래의 게시글 내용이 복사된 수정폼 모습

 

 

 


 

게시글 수정 

 

 

* PostController 

- @ModelAttribute("modifyPost") : 세션에 "modifyPost" 이름으로 저장된 객체를 꺼내옴

 

 

 

 

* PostService