Spring MVC + Ajax.Как отобразить ошибки? - PullRequest
6 голосов
/ 28 мая 2011

Мое веб-приложение Spring использует ajax с пружиной, и оно в целом основано на демонстрационном приложении Spring:

https://src.springframework.org/svn/spring-samples/mvc-ajax/trunk/ (Дополнительная информация: http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/)

На стороне клиента у меня есть форма (JSP):

<form:form modelAttribute="createLevel" action="createLevel" method="post">  
    <div class="form-item">  

    <form:label id="nameLabel" for="name" path="name" cssErrorClass="error">Level Name</form:label><br/>
     <form:input path="name" /><form:errors path="name" />
    </div>
    <div class="form-item">
    <input type="submit" value="Submit">  
    </div>  
</form:form>

Я отправляю форму на сервер следующим методом js:

$("#createLevel").submit(function() {
        var level = $(this).serializeObject();
        $.postJSON("create.do", level, function(data) {
            alert(data);
        });
        return false;               
    });

На стороне сервера у меня есть проверка, как показано ниже:

public final class LevelDto extends AbstractDto implements Serializable {
    private static final long serialVersionUID = 1L;

    private int id;

    @NotNull
    @Size(min = 2, max = 30)
    @LevelExistsConstraint(message = "Level with provided name is exists")
    private String name;
    // set; get;
}

И контроллер

   @RequestMapping(value = "/admin/create.do", method = RequestMethod.POST)
    public @ResponseBody
Map<String, ? extends Object> createLevel(@RequestBody LevelDto level,
        HttpServletResponse response) {
    //JSR-303 
    Set<ConstraintViolation<LevelDto>> failures = validator.validate(level);

    if (!failures.isEmpty()) {
        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        return validationMessages(failures);

    } else {

        return Collections.singletonMap("id", 10);

    }
}

Когда я отправляю неверные данные на сервер, я вижу, что все происходит правильно - мой валидатор обрабатывает данные, а клиент получает ответ об ошибке; Более того, в содержании ответа я вижу следующее:

{"name":"size must be between 2 and 30"}

Моя проблема в том, что я не знаю, как правильно связать полученное сообщение об ошибке. Очевидно, я могу сделать это с помощью js, но я подумал, что Spring автоматически связывает все сообщения об ошибках с представлением.

Любая помощь очень ценится.

-Cyril

1 Ответ

4 голосов
/ 28 мая 2011

создать класс AjaxResponse как контейнер поля формы, статуса и описания.

class AjaxResponse {
    model; //form attribute
    status;  // OK or ERROR
    description; // message description such as error message
}

Вы можете зациклить результат проверки ошибки, сгенерировав список AjaxResponse на основе результата проверки ошибки в формате JSON в ответ на действие вашего контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...