스프링 MVC
1) MessageSource
: Bean으로 등록
-반드시 빈의 이름이 messageSource로 지정
2) ResourceBundleMessageSource
3) 다국어 지원 위한 메시지 파일
properties 파일
-supports(..) : 검증하는 커맨드 객체 한정 설정
-validate(Object target) : 커맨드 객체 검증 ..
Object target : 커맨드 객체 -> 형변환
Errors errors : 검증 실패시 전달한 메세지 등록
- 커맨드 객체 자체 오류에 대한 처리 --
reject("에러코드");
reject("에러코드", "기본 메세지")
- 커맨드 객체의 특정 필드 오류에 대한 처리 --
rejectValue("필드명", "에러코드");
rejectValue("필드명", "에러코드", "기본메세지");
-hasErrors() : 한개라도 reject 또는 rejectValue가 호출되면 true
// 너무 김
// 필수 항목 검증
if (email == null && email.isBlank()) {
}
// 두 가지를 한 번에 검증
if (!StringUtils.hasText(email)) {
}
#fields.errors("필드명") : -> errors 객체 담긴 메세지를 필드명으로 조회 -> 배열
<form:errors path="필드명" />
-기본 에러 출력 태그 span, 여러 에러 메시지가 있는 경우 <br> 구분 (delimiter)
-element="태그명"
-delimiter="에러와 에러 메세지 사이에 추가될 태그"
// 이것 조차 김
// 필수 항목 검증
if (!StringUtils.hasText(email)) {
errors.rejectValue("email", "Required", "이메일을 입력하세요.");
}
if (!StringUtils.hasText(password)) {
errors.rejectValue("password", "Required", "비밀번호를 입력하세요.");
}
// 짧게 줄일 수 있음
// 필수 항목 검증
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "Required", "이메일을 입력하세요.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "Required", "비밀번호을 입력하세요."); }
// 범위를 좁혀야함.
->name이 중요.
에러코드 + "." + 커맨드객체이름 + "." + 필드명[인덱스].중첩필드명
에러코드 + "." + 커맨드객체이름 + "." + 필드명.중첩필드명
에러코드 + "." + 필드명[인덱스].중첩필드명
에러코드 + "." + 필드명.중첩필드명
에러코드 + "." + 중첩필드명
에러코드 + "." + 필드타입
에러코드
1) 글로벌 범위 Validator 설정과 @Valid 애노테이션
2) @InitBinder 애노테이션을 이용한 컨트롤러 범위 Validator
@InitBinder
protected void InitBinder(WebDataBinder binder) {
binder.setValidator(new RegisterRequestValidator());
}
-특정 컨트롤러에서 사용할 공통적인 Validator
3) 컨트롤러 범위 Validator > 글로벌 범위 Validator
// 필수 항목 검증
// 커맨드 객체 바로 뒤에 error가 와야함
->공통적으로 사용하는 메세지에는 따로 입력
1) 설정
2) Bean Validation의 주요 애노테이션
@AssertTrue
@AssertFalse
@DecimalMax
@DecimalMin
@Max
@Min
@Digits
@Size
@Null
@NonNull
@Pattern
@NotEmpty
@NotBlank
@Positive
@PositiveOrZero
@Email
@Future
@FutureOrPresent
@Past
@PastOrPresent
@SessionAttribute("이름") : 세션 값 조회 및 주입
@SessionAttributes(이름) :
-Model로 해당 이름으로 값을 속성으로 추가하면 세션에도 동일한 이름으로 추가
-세션에 해당 이름의 값이 있으면 Model에 자동 추가
-Magic Form
-SessionStatus
:setComplete() : SessionAttributes에 지정된 이름의 세션 값을 비울때
@CookieValue