@ModelAttribute
적용 대상을 Model의 속성으로 자동 추가해주는 어노테이션 반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능
package com.fastcampus.app;
import java.util.Calendar;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class YoilTellerMVC5 {
@ExceptionHandler(Exception.class)
public String catcher(Exception ex) {
System.out.println("ex="+ex);
return "yoilError";
}
@RequestMapping("/getYoilMVC5") // http://localhost/app/getYoilMVC5?year=2021&month=10&day=1
// public String main(@ModelAttribute("myDate") MyDate date, Model m) { // 아래와 동일
public String main(@ModelAttribute MyDate date, Model model) { // @ModelAttribute사용, 반환 타입은 String
System.out.println("myDate="+date);
// 1. 유효성 검사
if(!isValid(date))
return "yoilError";
// 2. 처리
// char yoil = getYoil(date);
// 3. Model에 작업한 결과를 저장
// @ModelAttribute 덕분에 MyDate를 저장안해도 됨. View로 자동 전달됨.
// m.addAttribute("myDate", date);
// m.addAttribute("yoil", yoil);
// 4. 작업 결과를 보여줄 뷰의 이름을 반환
return "yoil";
}
private @ModelAttribute("yoil") char getYoil(MyDate date) {
return getYoil(date.getYear(), date.getMonth(), date.getDay());
}
private char getYoil(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, day);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
return " 일월화수목금토".charAt(dayOfWeek);
}
private boolean isValid(MyDate date) {
return isValid(date.getYear(), date.getMonth(), date.getDay());
}
private boolean isValid(int year, int month, int day) {
if(year==-1 || month==-1 || day==-1)
return false;
return (1<=month && month<=12) && (1<=day && day<=31); // 간단히 체크
}
}
@ModelAttribute 생략 가능
컨트롤러 매개변수가
기본형, String : @RequestParam 생략
참조형 : @ModelAttribute 생략
WebDataBinder
package com.fastcampus.app;
import java.util.Calendar;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class YoilTellerMVC6 {
@ExceptionHandler(Exception.class)
public String catcher(Exception ex) {
System.out.println("ex="+ex);
return "yoilError";
}
@RequestMapping("/getYoilMVC6") // http://localhost/app/getYoilMVC6?year=2021&month=10&day=1
// public String main(@ModelAttribute("myDate") MyDate date, Model m) { // 아래와 동일
public String main(MyDate date, BindingResult reuslt) { // @ModelAttribute사용, 반환 타입은 String
System.out.println("reuslt="+reuslt);
// 1. 유효성 검사
if(!isValid(date))
return "yoilError";
// 2. 처리
// char yoil = getYoil(date);
// 3. Model에 작업한 결과를 저장
// @ModelAttribute 덕분에 MyDate를 저장안해도 됨. View로 자동 전달됨.
// m.addAttribute("myDate", date);
// m.addAttribute("yoil", yoil);
// 4. 작업 결과를 보여줄 뷰의 이름을 반환
return "yoil";
}
private @ModelAttribute("yoil") char getYoil(MyDate date) {
return getYoil(date.getYear(), date.getMonth(), date.getDay());
}
private char getYoil(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, day);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
return " 일월화수목금토".charAt(dayOfWeek);
}
private boolean isValid(MyDate date) {
return isValid(date.getYear(), date.getMonth(), date.getDay());
}
private boolean isValid(int year, int month, int day) {
if(year==-1 || month==-1 || day==-1)
return false;
return (1<=month && month<=12) && (1<=day && day<=31); // 간단히 체크
}
}
'Spring > Ch2. Spring MVC' 카테고리의 다른 글
Spring MVC - 회원가입 페이지 만들기2 (0) | 2022.09.18 |
---|---|
Spring MVC - 회원가입 페이지 만들기 (0) | 2022.09.18 |
Spring MVC - @RequestParam (0) | 2022.09.17 |
Spring MVC - Filter (0) | 2022.09.17 |
Spring MVC - JSTL(JSP Standard Tag Library) (0) | 2022.09.17 |