BackEnd/spring

간단한 Web페이지 프로젝트(4)- 상품등록 처리-@ModelAttribute

연향동큰손 2024. 7. 6. 21:25

 

목표

 

상품명, 가격, 수량을 적어주고 "상품 등록" 버튼을 눌러주면 상품 목록에 추가 되도록 하기

 

 

개발

 

방법1- @RequestParam을 이용

@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";
    }

 

1) @RequestParam 을 이용해서 itemName,price,quantity 요청 파라미터 데이터를 해당 변수에 받는다.

2) Item 객체를 생성하고 setter를 통해 변수를 넣어주고 itemRepository를 통해 저장한다.

3) 저장된 item을 모델에 담아서 뷰에 전달.

 

 

방법2 - @ModelAttribute

@PostMapping("/add")
    public String addItemV2( @ModelAttribute("item") Item item, 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";
    }

 

@ModelAttrubute ==>요청 파라미터의 값을 프로퍼티 접근법(Setxxx)으로 입력해준다.

따라서 setter를 이용해서 변수를 다 저장해줄 필요가 없다.

또한 @ModelAttrubute는 모델에 @ModelAttrubute로 지정한 객체를 자동으로 넣어준다. 따라서 model.addAttribute생략 가능

 

방법3 - ㅡModelAttribute이름 생략

@PostMapping("/add")
public String addItemV3( @ModelAttribute Item item, Model model) {

    itemRepository.save(item);
    return "basic/item";
}

 

****이번에는 @ModelAttrubute("item")에서 ("item")를 생략했다.

 

이런 경우에는 모델에 저장될 때 클래스명을 사용한다.

이때 클래스의 첫글자만 소문자로 변경해서 등록한다.

ex) Item ==> item

 

 

방법4 - ModelAttribute 전체 생략

@PostMapping("/add")
public String addItemV4(Item item) {

    itemRepository.save(item);
    return "basic/item";
}

 

기존의 ModelAttrubute도 생략이 가능하다.

대상 객체는 모델에 자동으로 등록된다.

 

 

 

<실행결과>

상품 추가
추가 완료
상품 목록에 추가 된 것을 확인할 수 있다.