Валидация формы Spring 3 MVC – Devcolibri – Android для начинающих

Валидация формы Spring 3 MVC

В этой статье я бы хотел вам показать как реализовать валидацию данных формы средствами Spring.

И так начнем со скриншота:

Так будет выглядеть наша форма до проверки на валидность данных

А так в случае если пользователь ввел не валидные данные (пустые поля)

Шаг 1.

Начнем с POJO:

package com.devcolibri.model;

public class User {
    private String email;
    private String password;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

 Шаг 2.

Создадим UserValidator:

package com.devcolibri.validator;

import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import com.devcolibri.model.User;

@Component
public class UserValidator implements Validator {

    @Override
    public boolean supports(Class<?> aClass) {
        return User.class.isAssignableFrom(aClass);
    }

    @Override
    public void validate(Object o, Errors errors) {
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "label.validate.emailEmpty");
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "label.validate.passwordEmpty");
    }

}

В первую очередь нужно реализовать интерфейс Validator:

1. метод supports(Class<?> aClass) регистрирует какие классы должны поддерживать данную валидацию;

2. метод validate(Object o, Errors errors) собственно и осуществляет валидацию, тут мы описываем правила валидации, а точней в каком случае данные будут считаться не валидными.

Шаг 3.

Рассмотрим следующую строку:

ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "label.validate.emailEmpty");

Тут вы видите что мы используем ValidationUtils это утилита позволяющая осуществлять валидацию данных.

Метод rejectIfEmptyOrWhitespace(errors, "email", "label.validate.emailEmpty"); позволяет нам указать поле которое надо валидировать ("email") и сообщение ("label.validate.emailEmpty"), где “label.validate.emailEmpty” – это сообщение из property файла:

label.validate.emailEmpty = Email is required
label.validate.passwordEmpty = Password is required

Шаг 4.

Создаем контроллер:

@Controller
@RequestMapping(value = "/index")
public class UserController {

    private RegistrationValidator validator;

    @Autowired
    public RegistrationUserController(RegistrationValidator validator){
        this.validator = validator;
    }

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView addUser(@ModelAttribute("command") User user,
                                   BindingResult result,
                                   SessionStatus status) {

        validator.validate(user, result);

        if(result.hasErrors()){
            return new ModelAndView("index", "command", user);
        }else {
            status.setComplete();
        }

        return new ModelAndView("index", "command", user);
    }

    @RequestMapping(method = RequestMethod.GET)
    public String welcome(ModelMap model) {
        model.addAttribute("command", new User());
        return "index";
    }
}

И проперти для вывода сообщений:

label.validate.emailEmpty = Email is required
label.validate.passwordEmpty = Password is required

Шаг 5.

Создаем валидатор:

@Component
public class RegistrationValidator implements Validator {

    @Override
    public boolean supports(Class<?> aClass) {
        return User.class.isAssignableFrom(aClass);
    }

    @Override
    public void validate(Object o, Errors errors) {
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "label.validate.emailEmpty");
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "label.validate.passwordEmpty");
    }

}

Шаг 6.

Теперь создадим jsp страницу:

<div class="white-block" style="width: 500px;">
    <h3 align="center"><spring:message code="label.reg.getStartedNow"/></h3>
    <form:form method="post" action="index.html" cssClass="form-horizontal" cssStyle="margin: 0 auto;" >
        <div class="control-group">
            <form:label path="email" cssClass="control-label"><spring:message code="label.reg.textEmail"/></form:label>
            <div class="controls">
                <form:errors path="email" cssClass="label label-important" />
                <div>
                    <form:input path="email" placeholder="e-mail" cssClass="reg-input" size="64" />
                </div>
            </div>
        </div>

        <div class="control-group">
            <form:label path="password" cssClass="control-label"><spring:message code="label.reg.textPassword"/></form:label>
            <div class="controls">
                <form:errors path="password" cssClass="label label-important" />
                <div>
                    <form:password path="password" placeholder="password" cssClass="reg-input" size="30" />
                </div>
            </div>
        </div>

        <div class="control-group">
            <div class="controls">
                <button type="submit" class="btn large btn-success">Registration</button>
            </div>
        </div>
    </form:form>

</div>

Шаг 7.

В mvc-dispatcher-servlet.xml нужно добавить следующую строку:

<context:component-scan base-package = "com.devcolibri" />

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

31699
04/12/2012

9 комментариев к статье "Валидация формы Spring 3 MVC"

Добавить комментарий

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)