Я новичок в весне. Проблема у меня заключается в том, что моя форма не заполняется исходными значениями при возвращении из проверки. Причина, по которой я реализую интерфейс Validator (вместо использования аннотации проверки), заключается в том, что я проверяю БД на наличие имени пользователя. Вот мой код (теги html опущены).
JSP:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<form:form action="register.html" commandName="userCommand" method="POST">
<form:errors path="*" cssClass="redBold"/>
Username:
<form:input path="username"/><form:errors path="username" cssClass="error" />
Password:
<form:password path="password"/>
Retype password:
<form:password path="password2"/>
Sex:
<form:radiobutton path="sex" value="F" label="Female"/>
<form:radiobutton path="sex" value="M" label="Male"/>
Date of birth:
<form:select path="dobDay" items="${dobDays}"/>
<form:select path="dobMonth" items="${dobMonths}"/>
<form:select path="dobYear" items="${dobYears}"/>
Postcode:
<form:input path="postcode"/>
<input type="submit" value="Register" class="button"/>
</form:form>
Контроллер:
@Controller
@RequestMapping("/register.*")
public class UserRegistrationController {
@RequestMapping(method = RequestMethod.POST)
public ModelAndView submitForm(HttpServletRequest request, @ModelAttribute("userCommand") User user, BindingResult result) throws Exception {
UserRegistrationValidator validator = new UserRegistrationValidator();
validator.validate(user, result);
if(result.hasErrors()){
// when returning from here I dont see values in the JSP form
return new ModelAndView("redirect:/register.html","userCommand",user);
}
// more code
return new ModelAndView("redirect:/home.html");
}
}
Validator:
@Component
public class UserRegistrationValidator implements Validator {
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@Override
public boolean supports(Class clazz) {
return User.class.equals(clazz);
}
@Override
public void validate(Object obj, Errors error) {
User user = (User) obj;
ValidationUtils.rejectIfEmpty(error, "username", "mandatory");
if (userService.exists(user.getUsername()){
error.rejectValue("username", null, "*");
}
if (user.getPostcode() == null || "".equals(user.getPostcode().toString())){
error.rejectValue("postcode", null, "*");
}
}
}
Большое спасибо!