티스토리 뷰
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
'java&spring' 카테고리의 다른 글
H2 DB와 JUnit을 사용하여 테스트 (0) | 2017.04.14 |
---|---|
MyBatis 설정할 때 주의점 (0) | 2017.04.12 |
[자바] ArrayList와 LinkedList의 차이 (0) | 2017.03.17 |
[Java] 배열 복사 & 이차원 배열 복사 (0) | 2017.03.10 |
[Java] 예약어 final 정리 (0) | 2017.03.07 |