티스토리 뷰
상품 등록 처리 - @ModelAttribute
상품 등록 폼에서 전달된 데이터로 실제 상품을 등록 처리하기
- 상품 등록 폼은 다음 방식으로 서버에 데이터를 전달한다.
POST - HTML Form
addItemV1 - BasicItemController에 추가
@PostMapping("/add")
public String addItemV1(@RequestParam String itemName,
@RequestParam int price,
@RequestParam Integer quantity,
Model model) {
Item item = new Item();
item.setItemName(itemName);
item.setPrice(price);
item.setQuantity(quantity);
itemRepository.save(item);
model.addAttribute("item", item);
return "basic/item";
}
상품 등록 처리 - @ModelAttribute
@RequestParam 으로 변수를 하나하나 받아서 Item 을 생성하는 과정은 불편했다.
- 이번에는 @ModelAttribute 를 사용해서 한번에 처리하겠다.
addItemV2 - 상품 등록 처리 - ModelAttribute // BasicController - 코드 추가
/**
* @ModelAttribute("item") Item item
* model.addAttribute("item", item); 자동 추가
*/
@PostMapping("/add")
public String addItemV2(@ModelAttribute("item") Item item, Model model) {
itemRepository.save(item);
//model.addAttribute("item", item); //자동 추가, 생략 가능
return "basic/item";
}
@ModelAttribute - 요청 파라미터 처리
- @ModelAttribute 는 Item 객체를 생성하고, 요청 파라미터의 값을 프로퍼티 접근법(setXxx)으로
입력해준다.
@ModelAttribute - Model 추가
- @ModelAttribute 는 중요한 한가지 기능이 더 있는데, 바로 모델(Model)에 @ModelAttribute 로
지정한 객체를 자동으로 넣어준다. 지금 코드를 보면 model.addAttribute("item", item) 가 주석처리
되어 있어도 잘 동작하는 것을 확인할 수 있다.
- 모델에 데이터를 담을 때는 이름이 필요하다.
- 이름은 @ModelAttribute 에 지정한 name(value) 속성을 사용한다.
- 만약 다음과 같이 @ModelAttribute 의 이름을 다르게 지정하면 다른 이름으로 모델에 포함된다.
주의
addItemV3 - 상품 등록 처리 - ModelAttribute 이름 생략
/**
* @ModelAttribute name 생략 가능
* model.addAttribute(item); 자동 추가, 생략 가능
* 생략시 model에 저장되는 name은 클래스명 첫글자만 소문자로 등록 Item -> item
*/
@PostMapping("/add")
public String addItemV3(@ModelAttribute Item item) {
itemRepository.save(item);
return "basic/item";
}
주의
addItemV4 - 상품 등록 처리 - ModelAttribute 전체 생략
/**
* @ModelAttribute 자체 생략 가능
* model.addAttribute(item) 자동 추가
*/
@PostMapping("/add")
public String addItemV4(Item item) {
itemRepository.save(item);
return "basic/item";
}
- @ModelAttribute 자체도 생략가능하다. 대상 객체는 모델에 자동 등록된다. 나머지 사항은 기존과
동일하다.
728x90
반응형
'[개발] - Spring > MVC 1' 카테고리의 다른 글
웹 페이지 만들기 (8) PRG (Post/Redirect/Get) (0) | 2023.11.04 |
---|---|
웹 페이지 만들기 (7) 상품 수정 (0) | 2023.11.04 |
웹 페이지 만들기 (5) 상품 등록 폼 (1) | 2023.11.02 |
웹 페이지 만들기 (4) 상품 상세 (0) | 2023.11.01 |
웹 페이지 만들기 (3) 상품 목록 - Thymeleaf (1) | 2023.10.31 |
Comments