Показать сообщение об ошибке с AJAX и Spring 3

#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
        }
    }
});