环境是Spring 3.0,具有新功能Vallidation。 我创建了一个带注释的控制器(ResetUserPasswordController),它管理HTTP.GET上的showForm和HTTP.POST上的提交表单。该功能是电子邮件请求的重置用户密码:用户先前访问另一个表单,我填写的是电子邮件地址和重新访问控件,如果重新访问是正确的,则用户会收到包含参数的链接的邮件。这两个方法(在HTTP.GET和HTTP.POST上)有两个不同的命令bean有不同的参数(我选择两个不同的bean来管理两个不同的验证器类中的验证过程)。可能你在质疑:为什么要定义两个不同的命令?我定义了以下角色:每个商务和基本(如notnull验证等)验证过程必须由支持特定命令bean的验证器类管理
我想在GET方法中创建由POST管理的命令bean的istance,但在某些测试中我意识到这可能是不正确的,如果验证过程变坏,我在输入命令上有所有错误这与我放入返回的ModelAndView中的gogin不同。
有人建议正确管理这种情况吗?
@RequestMapping(method = RequestMethod.POST)
public ModelAndView processSubmit(@Valid @ModelAttribute("command") ResetUserPasswordCommand command, BindingResult result, HttpServletRequest request, HttpServletResponse response) {
getValidator().validate(command, result);
if (result.hasErrors()) {
// TODO : implements error page.
return new ModelAndView();
} else {
Map<String, Object> model = new HashMap<String, Object>();
try {
PasswordChangeRequest passwordChangeRequest = getUserService().findPasswordChangeRequest(command.getUuid());
getUserService().updateUserPassword(command.getUuid(), command.getPassword());
autoLogin(request, response, passwordChangeRequest.getAccount(), command.getPassword());
} catch (ApplicationThrowable aex) {
return new ModelAndView("responseKO", model);
}
return new ModelAndView("Home", model);
}
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView setupForm(@Valid @ModelAttribute("command") ResetUserPasswordFormCommand command, BindingResult result) {
getFormValidator().validate(command, result);
if (result.hasErrors()) {
// TODO : implements error page.
return new ModelAndView();
} else {
Map<String, Object> model = new HashMap<String, Object>();
ResetUserPasswordCommand resetUserPasswordCommand = new ResetUserPasswordCommand();
resetUserPasswordCommand.setUuid(command.getUuid());
model.put("command", resetUserPasswordCommand);
model.put("reCaptchaHTML", getReCaptchaService().getReCaptchaObjectNoSSL().createRecaptchaHtml(null, null));
return new ModelAndView("user/ResetUserPassword", model);
}
}