작성
·
221
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";
}
이 코드 같은 동작 수행하는 거 맞나요??
저렇게 바꿔도 될거같아서요.
답변 2
1
@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 화면에 전달할 수 있을까요?
제가 인강보면서 이해하기로는 @ModelAttribute Item 을 해주면 내부적으로
Item item = new Item(); item.setItemName(itemName); item.setPrice(price); item.setQuantity(quantity);
model.addAttribute("item", item);
이렇게 작동한다고 이해해서요.
다른건가요? ㅠㅠ