Статьи

Проверка формы Spring MVC (с аннотациями)

Этот пост представляет простой пример проверки формы HTML. Он основан на примере Spring MVC с аннотациями . Код доступен на GitHub в каталоге Spring-MVC-Form-Validation.

Данные

Для этого примера мы будем использовать аннотации проверки bean-компонента и JSR303:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MyUser {
 
    @NotNull
    @Size(min=1,max=20)
    private String name;
 
    @Min(0)
    @Max(120)
    private int age;
 
    public MyUser(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public MyUser() {
        name = '';
        age = 0;
    }
 
    // Setters & Getters
 
}

страницы

Наша форма будет содержать элементы ввода, а также возможность отображения сообщений об ошибках:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@page contentType='text/html' pageEncoding='UTF-8'%>
<%@ taglib prefix='form' uri='http://www.springframework.org/tags/form' %>
<!doctype html>
<html>
<head>
  <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
  <title>My User Form!</title>
</head>
<body>
  <form:form method='post' action='myForm' commandName='myUser'>
    <table>
      <tr>
        <td>Name: <font color='red'><form:errors path='name' /></font></td>
      </tr>
      <tr>
        <td><form:input path='name' /></td>
      </tr>
      <tr>
        <td>Age: <font color='red'><form:errors path='age' /></font></td>
      </tr>
      <tr>
        <td><form:input path='age' /></td>
      </tr>
      <tr>
        <td><input type='submit' value='Submit' /></td>
      </tr>
    </table>
  </form:form>
</body>
</html>

Наша страница успеха:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<%@page contentType='text/html' pageEncoding='UTF-8'%>
<%@taglib prefix='form' uri='http://www.springframework.org/tags/form'%>
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<!doctype html>
<html>
<head>
  <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
  <title>Form Processed Successfully!</title>
</head>
<body>
    Form processed for <c:out value='${myUser.name}' /> ! <br />
    <a href='<c:url value='/'/>'>Home</a>
</body>
</html>

Наша домашняя страница:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<%@page contentType='text/html' pageEncoding='UTF-8'%>
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<!doctype html>
<html lang='en'>
<head>
  <meta charset='utf-8'>
  <title>Welcome !!!</title>
</head>
<body>
  <h1>
    Spring Form Validation !!!
  </h1>
<a href='<c:url value='/myForm'/>'>Go to the form!</a>
</body>
</html>

контроллер

Обратите внимание, что нам нужно использовать @ModelAttribute чтобы убедиться, что экземпляр MyUser всегда доступен в модели. В validateForm() нам нужно использовать @ModelAttribute для перемещения содержимого формы в проект MyUser.

01
02
03
04
05
06
07
08
09
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
@Controller
public class MyController {
 
    @RequestMapping(value = '/')
    public String home() {
        return 'index';
    }
 
    @ModelAttribute('myUser')
    public MyUser getLoginForm() {
        return new MyUser();
    }
 
    @RequestMapping(value = '/myForm', method = RequestMethod.GET)
    public String showForm(Map model) {
        return 'myForm';
    }
 
    @RequestMapping(value = '/myForm', method = RequestMethod.POST)
    public String validateForm(
        @ModelAttribute('myUser') @Valid MyUser myUser,
        BindingResult result, Map model) {
 
        if (result.hasErrors()) {
            return 'myForm';
        }
 
        model.put('myUser', myUser);
 
        return 'success';
 
    }
 
}

Maven Зависимости

Нам нужны следующие зависимости. Зависимость валидатора Hibernate необходима для обработки аннотаций JSR303:

01
02
03
04
05
06
07
08
09
10
11
12
<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
  <version>1.0.0.GA</version>
  <type>jar</type>
</dependency>
 
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>4.3.0.Final</version>
</dependency>

Запуск примера

После компиляции пример можно запустить с
mvn tomcat: беги. Затем просмотрите:

1
http://localhost:8383//spring-mvc-form-validation/.

Если конечный пользователь вводит недопустимые значения, будут отображаться сообщения об ошибках:

Ссылка: проверка формы Spring MVC (с аннотациями) от нашего партнера JCG Джерома Версринга в блоге Технических заметок