Я вижу странную проблему с контроллером Spring MVC.Этот метод предназначен для установки пароля.Он принимает два параметра формы: «пароль» и «подтверждение пароля».При первом вызове формы это работает нормально - поля передаются методу.
Проблема возникает при повторной отправке формы.Если форма заполнена неправильно в первый раз, пользователь корректно возвращается на страницу формы и получает запрос на повторный ввод пароля.Однако аргументы метода неверны со второй попытки.Аргументы представляют собой список, разделенный запятыми, который включает первую запись формы, соединенную со второй.
Пример:
Первая запись формы с полем "пароль" имеет значение "abc".Аргумент метода «пароль» имеет значение «abc».
Пост второй формы с полем «пароль» и значением «xyz».Аргумент метода «пароль» имеет значение «xyz, abc».
Документы Spring MVC не очень полезны.Каким-то образом старый пост формы запоминается и включается.Кто-нибудь имеет опыт решения этой проблемы?
Метод контроллера ниже:
@RequestMapping(value = "/account/reset", method = RequestMethod.POST)
public String resetPassword(@RequestParam("password") String password,
@RequestParam("confirmPassword") String confirmPassword,
@RequestParam("hash") String hash, ModelMap model) throws EncryptionException
{
String userName = stringEncrypterService.decrypt(hash);
User user = userService.findUserByPath(userName);
if (!password.equals(confirmPassword))
{
model.put("hash", hash);
model.put("user", user);
model.put("error",
"The two passwords you entered below do not match. Please try again.");
return "users/resetPassword";
}
userService.updatePassword(user, password);
emailService.sendUserInfoChange(user);
return "redirect:/session/signin?passwordReset=true";
}
Обновление.Несколько респондентов предположили, что, возможно, проблемные сообщения имеют дополнительные параметры URL или скрытые поля формы, что приводит к дублированию имен полей.Я подтвердил с Fiddler, что это не так.Вот необработанный запрос с третьей попытки.(немного отредактировано для удаления cookie сессии).
POST http://wintest.foriodev.com/simulate/account/reset/ HTTP/1.1
Host: wintest.foriodev.com
Connection: keep-alive
Referer: http://wintest.foriodev.com/simulate/account/reset/
Content-Length: 73
Cache-Control: max-age=0
Origin: http://wintest.foriodev.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: AUTOLOGIN_TOKEN=xyz; SIMULATE_WORKER=wintest; JSESSIONID=xyz;
password=a&hash=xyz&confirmPassword=a&save=Reset+Password