Notice
Recent Posts
Link
Tags
- spring
- PYTHON
- @transactional
- select
- mysql
- 자바
- nginx
- spring security 6
- sql
- 스프링부트
- DI
- 데이터베이스
- AWS
- session
- springboot
- Git
- join
- jpa
- spring boot
- 스프링
- 1차원 배열
- Django
- spring mvc
- SSL
- string
- 문자열
- 프로그래머스
- java
- ORM
- Docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Archives
개발하는 자몽
[Spring MVC] Model, @ModelAttribute 본문
Model과 @ModelAttribute에 대해서 정리가 필요한 것 같아서 글을 쓴다.
Model
Model은 객체다. HashMap 형태로 Controller에서 view에 필요한 데이터를 key, value로 넣어준다. key는 객체의 이름(view의 이름), value는 객체를 담는다. 넣어진 값은 view의 이름과 view를 렌더링 할 때 필요하다. Servlet의 request.setAttribute()와 비슷한 역할을 한다.(둘은 똑같지 않다. https://velog.io/@dbsrud9126/Spring-Model.addAttribute-vs-Request.setAttribute)
@PostMapping("/add")
public void add(@RequestParam String name,
@RequestParam Integer price,
Model model) {
Item item = new Item();
item.setName(name);
item.setPrice(price);
itemRepository.save(item);
model.addAttribute("item", item); // model에 item 객체를 담는다.
}
@ModelAttribute
@ModelAttribute는 아래 두 가지를 같이 처리해준다.
- 모델 객체 생성
- 생성한 모델 객체를 뷰에 삽입
@PostMapping("/add")
public void add(@ModelAttribute("item") Item item) {
itemRepository.save(item);
}
@ModelAttribute를 사용하면 @RequestParam으로 값을 받아 setter로 객체에 값을 넣는 과정이 자동화된다. 또한 model.addAttribute(key, value)까지 처리해준다. 즉, @ModelAttribute("itemA")이라고 하면 model.addAttribute("itemA",...)라고 담긴다.
@ModelAttribute의 이름 속성은 생략이 가능하다. 생략 시 클래스 명에서 첫 글자가 소문자로 치환되어 model.addAttribute에 담긴다.
@PostMapping("/add")
public void add(@ModelAttribute Item item) { //이름 속성 생략
itemRepository.save(item);
// model.addAttribute("item", item); //Item 클래스의 첫 글자가 소문자로 치환되어 담긴다.
}
또한 @ModelAttribute도 생략이 가능하다.
@PostMapping("/add")
public void add(Item item) { //@ModelAttribute 생략
itemRepository.save(item);
}
이 경우 마찬가지로 생략가능한 @RequestParam과 혼동될 수 있으니 아래를 참고하자.
- @RequestParam : String, int, Integer 같은 단순 타입
- @ModelAttribute : 나머지 (argument resolver로 지정해둔 타입 외)
참고
'Java > Spring' 카테고리의 다른 글
@SpringBootTest, @TestConfiguration (0) | 2022.09.24 |
---|---|
[트랜잭션] @Transactional AOP (0) | 2022.09.23 |
[Spring MVC] 뷰 템플릿, 템플릿 엔진, thymeleaf (0) | 2022.09.08 |
프록시(Proxy) (0) | 2022.08.13 |
Dependency LookUp (0) | 2022.08.12 |
Comments