Показать сообщение об ошибке с AJAX и Spring 3 - PullRequest
1 голос
/ 26 мая 2011

У меня была простая форма регистрации, и проверка работала нормально.Примерно так:

@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 сделали свое дело, и если в моей форме были какие-либо ошибки, они отображались в правильном положении в моем представлении * .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";
} 

Теперь я могу отображать сообщение об ОШИБКЕ, если проверка не пройдена, но как я могу отобразить те же сообщения, что и раньше?Например, я пишу неправильный адрес электронной почты и хотел бы увидеть сообщение о том, что указан неправильный адрес электронной почты.Можно ли этого добиться?

Спасибо

Давид

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Вы можете вернуть JSON String для вашего ответа проверки.Допустим, у вас есть AjaxResponse класс

AjaxResponse{
    model; //form attribute
    status;  // OK or ERROR
    description; // message description such as error message
}
0 голосов
/ 27 мая 2011

Просто сделайте еще одну проверку на стороне сервера, чтобы проверить неправильный адрес электронной почты.Если адрес электронной почты неверен, верните что-то вроде «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
        }
    }
});
...