코드 그라데이션

웹 페이지 만들기 (6) 상품 등록 처리 - @ModelAttribute 본문

Spring/MVC 1

웹 페이지 만들기 (6) 상품 등록 처리 - @ModelAttribute

완벽한 장면 2023. 11. 3. 17:35

 

상품 등록 처리 - @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
Comments