티스토리 뷰

반응형

hibernate-validator를 이용하여 유효성을 체크하는 방법이다.

먼저 필요한 라이브러리들을 빌드 한다.

 

build.gradle

compile 'javax.servlet:jstl:1.2'
compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
compile group: 'org.hibernate', name: 'hibernate-validator', version: '5.1.3.Final'
compile 'org.springframework:spring-webmvc:4.0.0.RELEASE'

만약 Maven을 사용한다면

 

pom.xml

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.3.Final</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.0.0.RELEASE</version>
</dependency>

 

다음은 설정 파일들이다.

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    metadata-complete="true" version="3.0">
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
    <context:component-scan base-package="org.gradle" />
    <mvc:annotation-driven/>
     
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

 

이제 설정이 끝났으니 유효성 체크를 사용해 보자

 

먼저 유효성을 체크 할 클래스를 만들자

 

PersonDto.java

import org.hibernate.validator.constraints.NotEmpty;
 
public class PersonDto {
    @NotEmpty(message="빈값이면 안됩니다.")
    private String name;
     
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

 

여기서 @NotEmpty 가 유효성을 체크해주는데 값이 비었으면 "빈값이면 안됩니다."라는 메세지를 보여준다. 만약 message를 쓰지 않고 @NotEmpty만 쓴다면 기본적으로 제공되는 메세지를 보여준다.

@NotEmpty 외에도 @Email, @Length, @NotBlank, @URL 등등이 있다.

 

다음은 컨트롤러와 JSP이다.

 

PersonController.java

import javax.validation.Valid;
 
import org.gradle.dto.PersonDto;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
public class PersonController {
     
    @RequestMapping("/home.do")
    public String validationTest(@Valid PersonDto personDto, BindingResult result){
        if(result.hasErrors()){
            return "home";
        }
        return "home";
    }
}

 

home.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ 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">
 
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
</head>
<body>
    <form:form action="/home.do" modelAttribute="personDto" method="post">
        아이디 : <input type="text" name="name"/>
        <form:errors path="name" />
        <input type="submit" id="btn" value="로그인">
    </form:form>
</body>

 

여기서 jsp와 controller는 맞춰 줘야 하는 것들이 있는데 form:form 태그에서 modelAttribute의 값과 controller에서 @Valid이 붙은 클래스의 변수명 현 프로젝트는 PersonDto인데 이 클래스 변수명을 personDto로 맞춰 줘야 한다. input의 name은 controller에 값을 전달하기 위해 PersonDto의 변수인 name으로 쓰고 form:errors 태그의 path 또한 PersonDto의 변수인 name으로 써야 한다.

 

input에 아무런 값도 넣지 않고 submit 했을 때 .jpg

input에 값을 넣고 submit 했을 때 .jpg

 

< 전체코드 >

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함
«   2024/12   »
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