среда Spring 3.0 с новой функцией Vallidation.Я создаю аннотированный контроллер (ResetUserPasswordController), который управляет showForm по HTTP.GET и формой отправки по HTTP.POST.Функция представляет собой пароль пользователя для сброса, запрашиваемый по электронной почте: ранее пользователь получал доступ к другой форме, где я заполнял адрес электронной почты и элемент управления recaptcha. Если recaptcha правильный, пользователь получает письмо со ссылкой, содержащей параметр.Два метода (в HTTP.GET и HTTP.POST) имеют два разных командных компонента, имеющих разные параметры (я выбираю два разных компонента для управления процессом валидации в двух разных классах валидаторов).Вероятно, вы спрашиваете: почему вы определяете две разные команды?Я определил следующую роль: Каждый бизнес-процесс и базовый (например, проверка недействительности и т. Д.) Должен управляться классом валидатора, который поддерживает определенный командный компонент
Я хочу создать istance командного компонента, управляемогоPOST, в методе GET, но во время некоторых тестов я понял, что это может быть не правильно, потому что, если процесс проверки идет плохо, у меня есть все ошибки в команде ввода, которые отличаются от того, что я собираюсь добавить в возвращенный ModelAndView.
У кого-то есть предложение правильно управлять этим сценарием?
@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);
}
}