В этой статье я бы хотел вам показать как реализовать валидацию данных формы средствами 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
9 комментариев к статье "Валидация формы Spring 3 MVC"