Зміст
Ця стаття є продовженням статті про форми в Spring і про перевірку введених користувачем даних. Будуть розглянуті анотації, що замінюють валідатор.
Щоб вказати параметри перевірки ім'я користувача будемо використовувати наступні анотації:
@NotBlank
@Size(min=3, max=16)
private String username;
Анотація @Email використовується для перевірки правильності введеного email'у:
@Email
private String email;
На жаль, немає стандартної анотації, яка перевіряє, що значення двох полів однакові (в нашому випадку - password і confirmPassword). Таку анотацію ми створимо в наступній статті.
Тобто, остаточний варіант класу SignupForm буде виглядати наступним чином:
package com.seostella.springfa.form;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
public class SignupForm {
@NotBlank
@Size(min=3, max=16)
private String username;
@NotBlank
private String password;
@NotBlank
private String confirmPassword;
@Email
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConfirmPassword() {
return confirmPassword;
}
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
У класі SignupValidator вже немає ніякої необхідності, тому він виключений з проекту.
Необхідно внести ще одну правку в контролер SignupController. Так як ми використовуємо анотації, які будуть перевіряти значення полів класу, необхідно описати анотацією @Valid параметр методу SignupForm. Нижче наведено повний лістинг класу SignupController:
package com.seostella.springfa.controller;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.seostella.springfa.form.SignupForm;
@Controller
@RequestMapping("/signup")
public class SignupController {
@RequestMapping(method = RequestMethod.GET)
public String signup(ModelMap model) {
SignupForm signupForm = new SignupForm();
model.put("signupForm", signupForm);
return "signup";
}
@RequestMapping(method = RequestMethod.POST)
public String processSignup(@Valid final SignupForm signupForm, final BindingResult result) {
if (result.hasErrors()) {
return "signup";
}
return "signup-success";
}
}
Решта файлів проекту залишаються без змін.
У класі SignupForm використовувалися анотації з двох пакетів: javax.validation.constraints і org.hibernate.validator.constraints. Розглянемо інші анотації з цих пакетів.
Пакет javax.validation.constraints:
Пакет org.hibernate.validator.constraints:
Код проекту Ви можете завантажити за наступним посиланням - Завантажити spring-fa.zip.
< | Форми та валідація форм в Spring | Анотація для перевірки рівності двох полів форми в Spring MVC | > |
31 жовтня 2012 р. 17:59
|
Почему у меня не работает это условие
if (result.hasErrors()) { return "signup"; } у меня всегда result.hasErrors() равен нулю, даже если я нарошно делаю ошибку? |
16 листопада 2012 р. 13:22
|
Разобрался
|
11 січня 2013 р. 00:41
|
А как проверить поле
private Date year; |
11 січня 2013 р. 00:48
|
Нужно задать первый вопрос!
Есть поле на форме для ввода даты 15.01.2012. Ка с ним правильно работать? При регистрации его нужно записать в БД, пр чтение извлечь! |
11 січня 2013 р. 02:30
|
Как провалидировать
@RequestMapping(value = "/useradd", method = RequestMethod.POST) public String addUserSubmit(@Valid final User user, HttpServletRequest request, final BindingResult result, Model model) { Role role = roleService.readRole(Integer.parseInt(request.getParameter("roleId"))); if(role.getName().equals("student")) { Group group = groupService.readGroup(Integer.parseInt(request.getParameter("groupId"))); user.setGroup(group); } user.getRoles().add(role); if(result.hasErrors()) return "useradd"; userService.addUser(user); foldersService.createFolders(user); model.addAttribute("addeduser", user); return "redirect:/useradd"; } |