-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
이 코드 같은 동작 수행하는거 맞지요?
21.10.25 16:27 작성 조회수 159
0
@GetMapping("/add")
public String addForm(Model model) {
model.addAttribute("item", new Item());
return "validation/v4/addForm";
}
이 코드랑
@GetMapping("/add")
public String addForm(@ModelAttribute Item item) {
return "validation/v4/addForm";
}
이 코드 같은 동작 수행하는 거 맞나요??
저렇게 바꿔도 될거같아서요.
답변을 작성해보세요.
1
David
2021.10.25
안녕하세요. 윤제리님, 공식 서포터즈 David입니다.
.
Model에 item을 담아서 뷰에 전달하는 것만 동일합니다.
첫번째 코드는 item을 내부에서 생성해서 model에 전달하고
두번째 코드는 item을 외부로부터 전달받아서 model에 전달합니다.
따라서 같은 동작을 수행한다고 보기 어렵습니다.
.
감사합니다.
윤제리
질문자2021.10.26
제가 인강보면서 이해하기로는 @ModelAttribute Item 을 해주면 내부적으로
Item item = new Item(); item.setItemName(itemName); item.setPrice(price); item.setQuantity(quantity);
model.addAttribute("item", item);
이렇게 작동한다고 이해해서요.
다른건가요? ㅠㅠ
David
2021.10.26
@GetMapping("/add")
public String addForm(Model model) {
model.addAttribute("item", new Item());
return "validation/v4/addForm";
}
위 코드에서는 생성된 item의 상태를 변경하는 부분(setter 메서드들)은 빠져있습니다.
이에 반해 @ModelAttribute는 외부에서 넘어온 값을 Item에 넣어주기 위해
내부적으로 item을 생성(new Item())하고 setter 메서드를 통해 넘어온 값을 item의 상태로 변경하게 됩니다.
외부에서 넘어온 값을 Item 객체로 받는 것과 컨트롤러 메서드 내에서 Item 객체를 생성하는 것은 다른 동작입니다.
물론 Item 객체를 생성하는 것, 생성된 Item 객체를 Model에 담아주는 것만 놓고보면 같은 동작입니다. 하지만 이 동작만을 위해 컨트롤러 메서드의 파라미터에 Item 객체를 쓴 것은 아닙니다.
한가지 질문드려도 될까요?
@GetMapping("/add")
public String addForm(Model model) {
model.addAttribute("item", new Item());
return "validation/v4/addForm";
}
만약 @ModelAttribute를 쓴 코드와 위 코드가 동일한 역할을 한다면 @ModelAttribute와 Item 객체를 파라미터로 받지 않을 때 어떻게 사용자가 전달한 값을 받아서 addForm 화면에 전달할 수 있을까요?
답변 2