У меня есть контроллер, в котором у меня есть метод GET, отображающий форму POJO, которая должна быть захвачена соответствующим POST. Однако при выполнении запроса POST форма POJO создается, но никогда не заполняется, и ошибки не отображаются (кроме ошибок проверки пустых значений).
Я использую Spring 3.0.
@Controller
public class UserController {
@RequestMapping(value = "/register", method = RequestMethod.GET)
public ModelAndView renderRegisterForm(
@ModelAttribute("registerForm") UserRegisterForm registerForm) {
ModelAndView mav = new ModelAndView("user.register");
mav.addObject("registerForm", registerForm);
return mav;
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView registerForm(
HttpServletRequest request,
@Valid @ModelAttribute("registerForm") UserRegisterForm registerForm,
BindingResult results) {
// All fields in registerForm are null, results has errors for the @NotNull annotations
return new ModelAndView("user.register");
}
}
На мой взгляд, все очень просто, для создания формы используются пружинные формы:
<form:form cssClass="registerForm" modelAttribute="registerForm" method="post" action="/register">
<div class="inputContainer">
<form:label path="name">
<spring:message code="user.edit.name"/>
</form:label>
<form:input path="name"/>
<form:errors path="name" cssClass="error"></form:errors>
</div>
<div class="inputContainer">
<form:label path="email">
<spring:message code="user.edit.email"/>
</form:label>
<form:input path="email"/>
<form:errors path="email" cssClass="error"></form:errors>
</div>
<div class="inputContainer">
<form:label path="password">
<spring:message code="user.edit.password"/>
</form:label>
<form:password path="password"/>
<form:errors path="password" cssClass="error"></form:errors>
</div>
<div class="inputContainer">
<form:label path="repeatPassword">
<spring:message code="user.edit.repeatPassword"/>
</form:label>
<form:password path="repeatPassword"/>
<form:errors path="repeatPassword" cssClass="error"></form:errors>
</div>
<div class="submit-button">
<input type="submit" value="<spring:message code="register"/>"/>
</div>
</form:form>
и сама форма ...
@FieldMatchList({@FieldMatch(first="password", second="repeatPassword")})
public class UserRegisterForm {
@NotNull
@Size(min = 1, max = 50)
private String name;
@NotNull
@Email
@Size(max=100)
private String email;
@NotNull
@Size(min=6, max=32)
private String password;
@NotNull
@Size(min=6, max=32)
private String repeatPassword;
// Getters and setters...
}
Заранее спасибо!