출처 : http://bbiyakbbiyak.tistory.com/3 (삐약이개발자님의 블로그)
# Validator : org.springframework.validation.Validator 인터페이스
** 구현 메소드
- boolean supports(Class<?> arg0)
: Validator가 해당클래스에 대한 값 검증을 지원하는지에 대한 여부 리턴한다.
- void validate(Object target(해당클래스, 커맨드객체), Errors errors)
: target 객체에 대한 검증을 실행하는 메소드, 검증결과에 문제가 있을 경우에는 errors 객체에 에러 정보를 저장
## @Valid 와 @InitBinder
: validate() 메소드를 직접 호출하지 않고 스프링프레임워크에서 호출하는 방법.
pom.xml에서 라이브러리를 추가 시켜야 한다.(의존 추가)
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
@Valid 아래와 같이 어노테이션 지정
public String memberSave(@ModelAttribute("member") Member member, BindingResult bindingResult)
------>
public String memberSave(@ModelAttribute("member") @Valid Member member, BindingResult bindingResult)
@InitBind 추가
@InitBind
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new MemberValidator());
}
## Errors인터페이스와 BindingResult인터페이스
Error - org.sprigFramework.validation.Errors
: 유효성 검증 결과를 저장할 떄 사용
BindingResult - org.springFramework.validation.BindingResult
: Errors의 하위 인터페이스로서 폼 값을 커맨드 객체에 바인딩한 결과를 저장하고 에러코드로 메세지를 가져온다.
# Errors 인터페이스가 제공하는 메소드(반환 타입 void)
. reject(String errorCode)
: 전 객체에 대한 글로벌 에러 코드를 추가
. reject(String errorCode, String defaultMessage)
: 전 객체에 대한 글로벌 에러코드를 추가하고, 에러코드에 대한 메세지가 존재하지 않을 경우 defaultMessage를 사용
. reject(String errorCode, Object[] errorArgs, String defaultMessage)
: 전 객체에 대한 글로벌 에러코드를 추가, 메세지 인자로 errorArgs를 전달, 에러코드에 대한 메세지가 존재하지 않을 경우 defaultMessage를 사용
. rejectValue(String field, String errorCode)
: 필드에 대한 에러코드를 추가
. rejectValue(String field, String errorCode, String defaultMessage)
: 필드에 대한 에러코드를 추가 에러코드에 대한 메세지가 존재하지 않을 경우 defaultMessage를 사용
. rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage)
: 필드에 대한 에러코드를 추가, 메세지 인자로 errorArgs를 전달, 에러코드에 대한 메세지가 존재하지 않을 경우 defaultMessage사용
# Errors 인터페이스의 에러 발생 여부를 확인하기 위한 메소드
. boolean hasErrors()
: 에러가 존재하는 경우 true 리턴
. int getErrorCount()
: 에러의 갯수를 리턴
. boolean hasGlobalErrors()
: reject() 메소드를 이용해서 추가된 글로벌 에러가 존재할 경우 true 리턴
. int getGlobalErrorCount()
: reject() 메소드를 이용해서 추가된 글로벌 에러 갯수를 리턴
. boolean hasFieldErrors()
: rejectValue() 메소드를 이용해서 추가된 에러가 존재할 경우 true 리턴
. int getFieldErrorCount()
: rejectValue() 메소드를 이용해서 추가된 에러 갯수를 리턴
. boolean hasFieldErrors(String field)
: rejectValue() 메소드를 이용해서 추가한 특정핑드의 에러가 존재할 경우 true 리턴
. int getFieldErrorCoutn(String field)
: rejectValue() 메소드를 이용해서 추가한 특정필드의 에러 갯수 리턴
( 사용 예제 )
1) Member.java (command 객체)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class Member { private String name; private String id; private int identifyNo; // getter & setter public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public int getIdentifyNo() { return identifyNo; } public void setIdentifyNo(int identifyNo) { this.identifyNo = identifyNo; } } | cs |
2. MemberController.java (Controller)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class MemberController { @RequestMapping("/memberForm") public String memberForm() { return "member/memberInput"; } /** 폼 유효성 검사 1 */ @RequestMapping(value="/memberSave1", method=RequestMethod.POST) public String memberSave1(@ModelAttribute("member") Member member, BindingResult bindingResult) { String resultPage = "member/memberOk"; // Validator 생성 MemberValidator mValidator = new MemberValidator(); mValidator.validate(member, bindingResult); // 오류여부 확인 if(bindingResult.hasErrors()) { resultPage = "member/memberInput"; } return resultPage; } /** 폼 유효성 검사 2 */ @RequestMapping(value="/memberSave2", method=RequestMethod.POST) public String memberSave2(@ModelAttribute("member") @Valid Member member, BindingResult bindingResult) { String resultPage = "member/memberOk"; // 오류여부 확인 if(bindingResult.hasErrors()) { resultPage = "member/memberInput"; } return resultPage; } @InitBinder protected void initBinder(WebDataBinder binder) { binder.setValidator(new MemberValidator()); } } | cs |
3. MemberValidator.java - Validator 클래스(유효성 체크)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import org.springframework.validation.Errors; // import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; public class MemberValidator implements Validator { @Override public boolean supports(Class<?> arg0) { return Member.class.isAssignableFrom(arg0); } @Override public void validate(Object obj, Errors errors) { Member member = (Member) obj; // 이름 유효성 체크) String mName = member.getName(); if(mName == null || mName.trim().isEmpty()) { System.out.println("회원 이름을 입력하세요."); errors.rejectValue("name", "공백오류"); } // ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "공백오류"); // 아이디 유효성 체크) String mId = member.getId(); if(mId == null || mId.trim().isEmpty()) { System.out.println("회원 아이디를 입력하세요."); errors.rejectValue("id", "공백오류"); } // ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "공백오류"); // 주민번호 오류체크 ) String mIdentifyNo = member.getId(); if(mIdentifyNo == null || mIdentifyNo.trim().isEmpty()) { System.out.println("주민번호를 입력하세요."); errors.rejectValue("identifyNo", "공백오류"); } } } | cs |
4) memberInput.jsp - View(회원정보 입력페이지)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <div align="center"> <h2> 회원가입 </h2> <hr/> <form method="post" action="memberSave"> <table border="1" cellpadding="10" cellspacing="0"> <tr> <td>이름</td> <td><input type="text" name="name"/></td> </tr> <tr> <td>아이디</td> <td><input type="text" name="id"/></td> </tr> <tr> <td>주민번호</td> <td><input type="text" name="identifyNo"/></td> </tr> </table> <br/> <input type="submit" value="전송"/> </form> </div> </body> </html> | cs |
5) memberOk.jsp - View(회원정보받는 페이지)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <div align="center"> <h1>회원정보페이지 입니다.</h1> <hr/> 이름 : ${ member.name }<br/> 아이디 : ${ member.id }<br/> 주민번호 : ${ member.identifyNo }<br/> </div> </body> </html> | cs |
'Language > Java, Android' 카테고리의 다른 글
스프링 로그아웃 후 뒤로가기 막기 (0) | 2018.05.21 |
---|---|
[스프링] 프로젝트명 완벽하게 바꾸기 (0) | 2018.05.11 |
[Spring] Valid Annotation을 이용한 Validation 체크 (0) | 2018.05.08 |
[JSP-Spring] ${sessionScope.id} 가 되지 않을 때 (0) | 2018.04.20 |
문자열(string) 비교 equals와 == 의 차이점 ( + equals의 반대) (0) | 2018.03.19 |