вівторок, 4 грудня 2012 р.

Валидация формы 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 страницу:

Шаг 7.

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

Ресурс: www.devcolibri.com

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments