728x90
반응형
@ModelAttribute
- 사용하여 View 와 Controller 에 어떻게 적용하는지 알아보자
- ModelAttribute 는 Model 을 지원하는 애노테이션이다.
- Controller 와 View 가 어떻게 Item 객체를 주고받는지 살펴본다.
Item 객체
package hello.itemservice.domain.item;
import lombok.Data;
@Data
public class Item {
private Long Id;
private String itemName;
private Integer price;
private Integer quantity;
public Item() {
}
public Item(String itemName, Integer price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
View 의 일부분
- th:action="@{/basic/items/add}":
- sumbit 이 발생하면 해당 컨트롤러를 호출해준다. - input 의 이름들은 각각 itemName, price, quantity 로 Item 객체의 필드 네임과 일치한다.
<form action="item.html" th:action="@{/basic/items/add}" method="post">
<div>
<label for="itemName">상품명</label>
<input type="text" id="itemName" name="itemName" class="form-control" placeholder="이름을 입력하세요">
</div>
<div>
<label for="price">가격</label>
<input type="text" id="price" name="price" class="form-control"
placeholder="가격을 입력하세요">
</div>
<div>
<label for="quantity">수량</label>
<input type="text" id="quantity" name="quantity" class="form-control" placeholder="수량을 입력하세요">
</div>
<hr class="my-4">
<div class="row">
<div class="col">
<button class="w-100 btn btn-primary btn-lg" type="submit">상품 등록</button>
</div>
</div>
</form>
@RequestParam 과 @ModelAttribute
Request 에서 ModelAttribute 로 적용해보는 과정을 정리해본다.
@RequestParam 으로 요청 파라미터 가져오기
- form 에 input으로 정의된 데이터들을 가져온다
@PostMapping("/add")
public String addItemV1(@RequestParam String itemName ,
@RequestParam int price,
@RequestParam int 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 적용1
- 각각 RequestParam 으로 받았던 데이터를 객체로 받을수 있다.
- 객체의 필드이름과 form 의 input 타입의 이름만 같으면 된다.
@PostMapping("/add")
public String addItemV2(@ModelAttribute("item") Item item) {
itemRepository.save(item);
return "basic/item";
}
@ModelAttribute 적용2
- ModelAttribute 의 name을 생략할수있다.
@PostMapping("/add")
public String addItemV3(@ModelAttribute Item item) {
itemRepository.save(item);
return "basic/item";
}
@ModelAttribute 적용3
- 아예 ModelAttribute 자체도 생략이 가능하다.
@PostMapping("/add")
// 아예 생략도 가능하다.
public String addItemV4(Item item) {
itemRepository.save(item);
return "basic/item";
}
728x90
반응형
'Spring > spring mvc 1 스터디' 카테고리의 다른 글
[Spring] PRG(Post Redirect Get) (0) | 2021.12.03 |
---|---|
[Spring] 웹페이지 만들어 보기 (0) | 2021.12.02 |
[Spring] Message Converter (0) | 2021.11.25 |
[Spring] HTTP 응답 (0) | 2021.11.21 |
[Spring] HTTP 요청메세지 TEXT, JSON (0) | 2021.11.16 |
댓글