- @Vaild는 JSR-303의 빈검증기를 이용하여 모델 오브젝트를 검증하는 지시자이다라고 토비의 스프링에 나온다.
- 폼 체크에는 JSR-303말고도 다른 방법이있지만 이거부터 써본다.
- 난 단순하게 생각할꺼다. 그냥 @Vaild를 이용하여 bean파일의 폼체크를 하기위해 사용한다 라고 생각할 것 이다.
- @Vaild는 @ModelAttribute 를 이용하여 모델 오브젝트를 가져와 검증형태 와맞는지 검증하며 에러가 발생했을시 BindingResutl를 이용하여 오류메세지를 반환한다.
- @Vaild를 간결하게 사용하기 위해 Spring Form Tag를 이용하여 View화면을 만들었다.
Spring Form Tag는 http://dev.anyframejava.org/anyframe/doc/web/3.1.0/webfw/springmvc/basic/tag.html
주소참조.
아래는 JSR-303의 오류 검증 애노테이션이다.
@AssertFalse : false 값만 통과 가능
@AssertTrue : true 값만 통과 가능
@DecimalMax(value=) : 지정된 값 이하의 실수만 통과 가능
@DecimalMin(value=) : 지정된 값 이상의 실수만 통과 가능
@Digits(integer=,fraction=) : 대상 수가 지정된 정수와 소수 자리수보다 적을 경우 통과 가능
@Future : 대상 날짜가 현재보다 미래일 경우만 통과 가능
@Past : 대상 날짜가 현재보다 과거일 경우만 통과 가능
@Max(value) : 지정된 값보다 아래일 경우만 통과 가능
@Min(value) : 지정된 값보다 이상일 경우만 통과 가능
@NotNull : null 값이 아닐 경우만 통과 가능
@Null : null일 겨우만 통과 가능
@Pattern(regex=, flag=) : 해당 정규식을 만족할 경우만 통과 가능
@Size(min=, max=) : 문자열 또는 배열이 지정된 값 사이일 경우 통과 가능
@Valid : 대상 객체의 확인 조건을 만족할 경우 통과 가능
------------------------------------------------------------
이제부터 사용법.
간단요약
1. pom.xml에 Hibernate 추가한다. why? @Vaild를 사용하기 위해서.
2. bean파일 생성후 폼체크를 위한 애노테이션을 사용한다.
3. Spring Form Tag를 이용하여 View(.jsp)페이지를 만든다.
4. Controller에서 @ModelAttribute 와 @Vaild 를 사용한다.
1. pom.xml에 @Vaild사용을 위한 아래의 dependency 추가한다
1 2 3 4 5 6 | <!-- Hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.0.0.GA</version> </dependency> |
2. 모델인 Member.java생성
- @NotNull과 @Size @Pattern을 사용하여 체크할 폼형태를 정의하였고, 폼체크와 맞지않을 경우에는 message의 내용을 출력한다.
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 | package com.test.bean; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; public class Member { @NotNull @Size(min = 1, max = 10) private String name; @NotNull @Size(min = 1, message = "이메일을 입력하십시오.") @Pattern(regexp = "^([^@\\s])+[@][^@\\s]+[.][^@\\s]+", message = "올바른 이메일 형식이 아닙니다.") private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } |
3. View페이지인 main.jsp를 제작.
- Spring Form Tag를 써서 만들었다고는 쓰지만 사실 별거없다.
- 그래도 일단은 Spring From Tag를 쓰기위해서는
먼저 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 요고 한줄 적어주면 되겠다.
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 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!-- 먼저 Spring Form Tag를 사용하기 위해 taglib 한줄 추가한다. --> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <!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=EUC-KR"> <title>Insert title here</title> </head> <style> .errorMsg { font-size:12px; color: red; } </style> <body> <!-- commandName 는 폼에 적용할 모델의 이름을 정의한다. --> <form:form commandName="member" action="/formTag/check" method="POST"> <table border="1"> <tr> <td>name</td> <!-- path 는 따로 지정하지 않았다면 <input>태그의 id, name에 할당된다. 이때 path명은 모델의 변수명과 동일해야된다!!@@ --> <td><form:input path="name" /></td> <!-- errors는 위의 input의 바인딩 에러메시지를 출력하기위해 사용한다. path에 지정한 이름과 일치하는 곳에 에러메시지 출력.--> <td><form:errors path="name" id="name" cssClass="errorMsg"></form:errors></td> </tr> <tr> <td>email</td> <td><form:input path="email" /></td> <td><form:errors path="email" id="email" cssClass="errorMsg"></form:errors></td> </tr> <tr> <td colspan="3" align="center"> <input type="submit" value="check"> </tr> </table> </form:form> </body> </html> |
4. FormTagController 를 생성한다.
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 | package com.test.formTag; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.test.bean.Member; @Controller public class FormTagController { @RequestMapping(value = "/main") public void main(Model model){ //<form:form>의 commandName에는 여기서 정의한 이름과 일치시킨다. //main페이지를 띄울때 member객체를 만들어서 리턴시키고 //뷰에서 폼형태에 담아서 다시 컨트롤러로 보내서 @Vaild를 통해 검증하는거같다. //<form:form>의 commandName의 설명을 봐도 먼소리인가 싶었었다.. model.addAttribute("member",new Member()); } @RequestMapping(value = "/check", method = RequestMethod.POST) //@ModelAttribute @Valid 을 이용하여 폼체크를 한다. public String check(@ModelAttribute @Valid Member member, BindingResult bindingResult) { //에러발생시 반환. if(bindingResult.hasErrors()){ System.out.println("폼 점검중입니다."); return "main"; }else{ return "success"; } } } |
까지하면 끝!!
결과화면!!!!
'Spring' 카테고리의 다른 글
Controller redirect data 전송 (0) | 2013.10.16 |
---|---|
Spring Mybatis를 이용한 우편(post)검색 (0) | 2013.10.15 |
Spring Form Tag (0) | 2013.10.07 |
Controller @ModelAttribute (0) | 2013.10.07 |
Controller @RequestParam (1) | 2013.10.07 |