#ajax #spring #validation #response
#ajax #spring #проверка #ответ
Вопрос:
У меня была простая регистрационная форма, и проверка прошла нормально. Что — то вроде этого:
@RequestMapping(value = "/email", method = RequestMethod.POST)
public String changeEmail(@Valid @ModelAttribute("editEmail") EditEmailForm editEmailForm, BindingResult result) {
if (result.hasErrors()) {
return "editAccount";
}
userService.changeEmail(editEmailForm);
return "redirect:/";
}
и @Valid annotation выполнили свою работу, и если в моей форме были какие-либо ошибки, они отображались в правильном положении в моем представлении *.vm.
Но теперь я хотел бы использовать AJAX для отправки моей формы, поэтому я сменил свой контроллер на :
@RequestMapping(value = "/email", method = RequestMethod.POST)
@ResponseBody
public String changeEmail(@Valid @ModelAttribute("editEmail") EditEmailForm editEmailForm, BindingResult result) {
if (result.hasErrors()) {
return "ERROR";
}
userService.changeEmail(editEmailForm);
return "SUCCESS";
}
Теперь я могу отобразить сообщение об ОШИБКЕ, если проверка завершится неудачей, но как я могу отобразить те же сообщения, что и ранее? Например, я ввожу неправильный адрес электронной почты, и я хотел бы увидеть сообщение о том, что указан неправильный адрес электронной почты. Возможно ли этого достичь ?
Спасибо
Dawid
Ответ №1:
Вы можете вернуть строку JSON для ответа на проверку. Допустим, у вас есть AjaxResponse
класс
AjaxResponse{
model; //form attribute
status; // OK or ERROR
description; // message description such as error message
}
Комментарии:
1. хорошо, это выглядит как хорошее решение, но не могли бы вы написать простой пример? Я не использовал JSON ранее. как заполнить данные JSON и отобразить ошибки в моем файле просмотра?
2. У меня есть ссылка на код о Spring Rest с JSON. Надеюсь, вы сможете внести изменения в соответствии с вашими потребностями. github.com/bijukunjummen/mvc-samples Учебное пособие из блога spring: blog.springsource.com/2009/03/08/rest-in-spring-3-mvc
Ответ №2:
Просто выполните еще одну проверку на стороне сервера, чтобы проверить, не указан ли неверный адрес электронной почты. Если адрес электронной почты неверен, верните что-то вроде «BAD_EMAIL» и обработайте это должным образом на стороне клиента.
if (/* Email is bad */) {
return "BAD_EMAIL";
}
Допустим, на стороне клиента вы используете dojo,
dojo.xhrPost({
url : "/email",
...various args
load : function (response, ioArgs) {
if (response === "BAD_EMAIL") {
// show bad email message
}
}
});