BindingResult Argument is Expected to Be Immediately After the Model Attribute Argument in the Controller Method Signature
@Controller
public class YoilTellerMVC6 {
@ExceptionHandler(Exception.class)
public String catcher(Exception ex, BindingResult result) {
System.out.println("result="+result);
System.out.println("error="+result.getFieldError());
return "yoilError";
}
@RequestMapping("/getYoilMVC6") // http://localhost/ch2/getYoilMVC6
public String main(MyDate date, BindingResult result) {
System.out.println("result="+result);
// 1. 유효성 검사
if(!isValid(date))
return "yoilError"; // 유효하지 않으면, /WEB-INF/views/yoilError.jsp로 이동
return "yoil"; // /WEB-INF/views/yoil.jsp
}
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);
}
Spring의 WebDataBinder를 공부하던 중 발생한 에러이다.
BingdingResult는 기본적으로 모델이나 Error 뒤에 위치해야 한다고, Stack Overflow 등에서 이야기를 하고 있다.
강사님이 주신 위의 코드에서도 마찬가지로, 모델인 date 뒤에 있고 말이다
그런데, 계속 binding Result가 뒤에 있어야 한다는 에러가 발생한다
의심 포인트 : 모델의 Yoil 속성을 코드 흐름상 BindingResut 뒤에 만들기 때문이지 않을까?
ChatGPT에게도 자세히 물어봤음에도 거의 아닐거라고 했지만, 나름 확신을 가지고 있다.
구글링해도 비슷한 사례가 안나와서, yoil 속성이 문제라 생각이 든 후부터 한 줄씩 주석처리를 하면서 코드를 실행 시키며 확인을 하였다.
yoil이 문제라면 미리 모델에 선언해두면 에러가 안생기지 않을까?란 생각이었는데 맞는거 같다
@Controller
public class YoilTellerMVC6 {
@ExceptionHandler(Exception.class)
public String catcher(Exception ex, BindingResult result) {
System.out.println("result="+result);
System.out.println("error="+result.getFieldError());
return "yoilError";
}
@RequestMapping("/getYoilMVC6") // http://localhost/ch2/getYoilMVC6
public String main(MyDate date, BindingResult result) {
System.out.println("result ="+result);
System.out.println("date = "+date);
// 1. 유효성 검사
if(!isValid(date))
return "yoilError"; // 유효하지 않으면, /WEB-INF/views/yoilError.jsp로 이동
char yoil = getYoil();
return "yoil"; // /WEB-INF/views/yoil.jsp
}
}
일단은 getYoil을 모델에 속성으로 추가하고, getYoil 메소드 또한, public으로 모델 안으로 옮겼다. 그랬더니 에러 해결…!
public class MyDate {
private int year;
private int month;
private int day;
private char yoil;
~~~~~~getter/setter~~~~~~~
public char getYoil() {
Calendar cal = Calendar.getInstance();
cal.set(this.year, this.month - 1, this.day);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
return " 일월화수목금토".charAt(dayOfWeek);
}
@Override
public String toString() {
return String.format("[year=%d, month=%d, day=%d]", year, month, day);
}
}
에러 해결 인증 샷
아직까진 이게 완전한 해답이라는 생각이 안들지만, 일단은 해결…?한 것 같다
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'ETC' 카테고리의 다른 글
원하는 회사 가려면 이정도는 해야지 (3) | 2023.08.14 |
---|---|
Tistory Toc 추가하는 방법 (0) | 2023.07.01 |
apt update 안될 때 해결 방법 (0) | 2023.05.15 |
Cannot read properties of undefined (reading 'joinColumns') (0) | 2023.05.08 |
Python 가상 환경 구성 (0) | 2023.05.05 |