Spring

Controller @Vaild ( JSR-303 )

닉넥임 2013. 10. 8. 19:28
반응형


TestSpringFormTag.zip



- @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 를 생성한다.


 - main페이지를 띄울때 member객체를 만들어서 리턴시키고 
 뷰에서 폼형태에 담아서 다시 컨트롤러로 보내서 @Vaild를 통해 검증하는거같다.
 <form:form>의 commandName의 설명을 봐도 먼소리인가 싶었었다..


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