폼 입력 값 유효성 체크
- 서버 사이드에서 폼 입력 값에 대한 유효성을 체크하는 것
- Spring MVC는 폼 입력 값에 대한 유효성 체크를 지원하는 API 제공
라이브러리 의존성
- jakarta.validation-api와 hibernate-validation 의존성을 추가한다
- jakarta.validation-api와 자바 표준 유효성 검사 스펙에 따른 API를 제공한다
이 스펙은 JSR-380(Java Spectification Request 380)으로 정의되며 자바기반 애플리케이션에서 데이터 모델의
유효성을 검사하는데 사용되는 표준
- hirbernate-validator는 jakarta.validation-api의 구현체
스프링의 폼 입력 값 유효성 체크 API
@Valid
- jakarta.validation 패키지에 정의되어 있는 어노테이션
- 데이터 모델의 유효성 검사를 활성화시키는 사용
- 이 어노테이션을 사용하면 데이터 모델에 대한 정의된 유효성 검사 어노테이션을 검사하고, 데이터 모델이 제약조건을 위반한 경우, 해당 검사 오류를 BindingResult 객체에 추가
BindingResult
- 스프링에서 유효성 검사 결과 및 데이터 바인딩 오류를 저장하고 관리하는데 사용하는 객체다
- BindingResult는 spring mvc의 요청핸들러 메소드에서 @Valid 어노테이션과 함께 사용되며, 데이터 모델의 유효성 검사를 수행한 후 발생한 오류를 수집하고, 관리
주요 메소드
boolean hasErrors( )
- BindResult객체에 유효성 검사를 위반한 경우 true를 반환
- 유효성 검사를 위발할 때 마다 FieldError 객체다 BindingResult 객체에 추가
void rejectValue(String field, String errorCode, String defaultMessage)
- BindingResult 객체에 수동으로 field error 를 추가시킨다
- @어노테이션으로 지원되지 않는 유효성 체크 항목에 대한 유효성을 수동으로 체크하고, field error를 추가시킬 수 있다
- field : Form 객체의 멤버변수명
- errorCode : 에러코드
- defaultMessage : 에러 메세지
사용예
입력 폼 화면을 요청하면
UserRegisterForm 객체를 생성해서 Model 객체에 저장한 다음 form.jsp로 내부이동 한다
form.jsp에서는 "userRegisterForm" 으로 저장된 UserRegisterForm 객체를 찾아서 입력필드에 값을 표현한다
(최초 입력폼에 진입할 때는 UserRegisterForm 객체의 필드에 값이 하나도 없기 때문에 입력필드에 아무것도 표현되지 않는다)
form.jsp에 가입버튼을 클릭하면 입력필드에 입력한 값이 서버로 제출되고, Spring MVC는 요청핸들러 메소드의 매개변수를 조사해서 UserRegisterForm 객체를 생성하고, UserRegisterForm 객체에 각 멤머변수에 입력값을 저장한다
@Valid 어노테이션은 폼 입력 값 유효성 체크를 활성화한다
UserRegisterForm 객체의 어노테이션을 참고해서 유효성 체크를 수행하고, 위반사항이 있을 경우 BindingResult 객체에 Field Error를 저장한다
요청핸들러 메소드에 폼 입력값이 저장된 UserRegisterForm 객체와 유효성 체크 결과가 저장된 BindingResult 객체를 전달한다
요청핸들러 메소드의 매개변수에 UserRegisterForm 객체가 정의되어 있기 때문에
UserRegisterForm 객체를 스프링이 생성하고, 요청파라미터 값을 대입하고, 최종적으로 UserRegisterForm 객체를
ModelAndView 객체에 저장시키기 때문에 내부이동된 form.jsp에서는 입력폼에서 입력값을 출력할 수 있다
return "form";
WEB-INF/views/form.jsp 로 내부 이동시킨다
<form:form> 태그
- 스프링에서 제공하는 <form> 태그
- <form:form>은 <form> 태그를 변경된다
- 폼 입력 값 유효성 체크와 관련된 태그를 포함한다
<form:form> 속성
입력 폼의 입력필드에 표현한 값을 가지고 있는 Form 객체의 modelAttribute 이름
예시
"userRegisterForm" 이라는 이름으로 UserRegisterForm 객체를 Model 객체에 담아서 전달하는 역할을 수행한다
여기서 "userRegisterForm"이 modelAttribute의 이름이다
<form:form> 태그의 종류
<form:checkbox />
<form:checkboxes />
<form:hidden />
<form:input />
<form:option />
<form:options />
<form:password />
<form:radiobutton />
<form:radiobuttons />
<form:select />
<form:textarea />
- 스프링에서 제공하는 폼 입력 필드
- 입력필드의 path 속성은 기존 <form> 태그의 name 속성에 해당한다
- 입력필드의 path 속성명과 Form 클래스의 필드명이 일치해야 한다
<form:errors />
- 유효성 체크 오류 메세지를 출력시킨다
- path 속성은 Form 클래스의 필드명이다
- path 속성에서 지정한 필드에 저장된 값이 유효성 체크를 위반했을 경우 해당 제약조건에 지정한 오류 메세지를 출력시킨다
'Spring' 카테고리의 다른 글
Spring_Spring MVC, 첨부파일 업로드 (0) | 2024.03.15 |
---|---|
Spring_스프링 시큐리티 (0) | 2024.03.12 |
Spring_AOP (0) | 2024.02.27 |
Spring_스프링 프레임워크(Spring framework), DI, IOC (0) | 2024.02.22 |
Model2_MVC패턴 (Spring 들어가기 전) (0) | 2024.02.15 |