@ModelAttribute는 적용 대상을 Model의 속성으로 자동 추가 (Model에 자동저장)해주는 애너테이션이다.
반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능하다.
1. 매개변수
@RequestMapping("/getYoilMVC5")
//public String main(@ModelAttribute("myDate") MyDate date, Model model){// 아래와 동일
public String main(@ModelAttribute MyDate date, Model model) {
char yoil = getYoil(date);
model.addAttribute("myDate", date);
model.addAttribute("yoil", yoil);
return "yoil";
}
Mydate앞에 ModelAttribute를 적어주면 Model에 자동 저장이 된다.
그래서 model.addAttribute("myDate", date); 이렇게 저장 할 필요가 없다.
@ModelAttribute("myDate")처럼 Key의 이름을 적어줘야하지만 생략하면 @ModelAttribute MyDate에서 Mydate의 첫글자를 소문자로 한 mydate를 Key로 사용한다.
Key | Value |
"mydate" | date주소 |
2. 반환타입
private @ModelAttribute("yoil") char getyoil(MyDate date){
return getYoil(date.getYear(), date.getMonth(), date.getDay());
}
반환타입 앞에도 @ModelAttribute를 사용할 수 있다.
호출 결과를 Model에 저장한다. @ModelAttribute("yoil")이 Key가 된다.
만약 메서드를 호출한 결과가 "수"라면 Key "yoil" Value "수"로 저장된다.
Key | Value |
"mydate" | date주소 |
"yoil" | "수" |
그럼 아래와 같이 코드가 간결해 진다.
@RequestMapping("/getYoilMVC5")
//public String main(@ModelAttribute("myDate") MyDate date, Model model){// 아래와 동일
public String main(@ModelAttribute MyDate date, Model model) {
return "yoil";
}
MyDate같은 참조형 매개변수 앞에 @ModelAttribute를 붙일 수 있고, @ModelAttribute를 생략할 수 있다.
컨트롤러 매개변수
@RequestParam은 기본형, String일 때 생략되어 있다고 보면 된다.
@ModelAttribute은 참조형일 때 생략되어 있다고 보면된다.
참조형일때는 @RequestParam을 붙일 수 없다. 여러개의 값이 바인딩 되는 것이기 때문에.
기본형이나 String같은 경우엔 View에서 바로 사용할 수 있기 때문에 Model에 저장 할 필요가 없다.
'Programming > Spring' 카테고리의 다른 글
Spring , 좋은 객체 지향 프로그래밍 (0) | 2022.08.08 |
---|---|
@GetMapping @PostMapping 그리고 view-controller (0) | 2022.01.02 |
@RequestParam (0) | 2022.01.01 |
JSTL이란? JSTL core태그 (0) | 2021.04.19 |
[Spring] 스프링 MVC - Model (데이터 전달자) (0) | 2021.04.14 |
댓글