Я работаю над веб-приложением Spring MVC 3.1, и почти все мои формы отправляются с использованием jQuery ajax-вызовов и формируют сериализацию. Это отлично работает. Мне нужен был способ вывести сообщения об ошибках проверки с сервера, поэтому я искал пример. Я нашел один онлайн, который по существу помещал объект BindingResult в пользовательский объект JsonResponse, а затем возвращал его как @ResponseBody
. Это также отлично работает! Здесь мы добираемся до моей проблемы, хотя объект BindingResult
возвращается, ни одно из сообщений не интерполируется, как если бы я использовал теги Spring: form. Я рассмотрел этот вопрос и обнаружил, что могу попытаться перезаписать SpringMessageSourceInterpolater
с помощью специального, это помогло, но теперь только интерполяция ошибок проверки JSR-303, а не фактические ошибки TypeMismatch
из привязки Spring. Вот пример того, что я делаю:Сообщения об ошибках с Spring MVC 3.1 и ajax calls
public @ResponseBody
JSonResponse addQuote(@ModelAttribute("quote") @Valid QuoteBean quote, BindingResult result, HttpServletRequest request, HttpServletResponse response) throws IOException
{
jsonResponse = new JsonResponse();
//Some handle code
jsonResponse.setStatus(JsonResponse.ResponseStatus.INVALID);
jsonResponse.setResult(result.getAllErrors());
return jsonResponse;
}
Как я уже сказал, Json сериализации отлично, и за ошибки JSR-303, то defaultMessage
поля объекта ошибки является интерполированным сообщением, но если error is a Spring TypeMismatch
(Как положить 1
в поле, которое я привязываю к дате), вместо этого я получаю длинное сообщение сгенерированное Spring. Я пробовал добавлять коды сообщений, которые соответствуют всем error.getCodes()
, которые находятся на объекте безрезультатно (например, TypeMismatch.fieldname
). Конечно, кто-то использовал Spring и Ajax и работал с этой валидацией, но я не могу найти ответ.
То, что я закончил делать, чтобы получать сообщения рядом с полями, было похоже на теги Spring 'form', я добавляю новый' div 'рядом со всеми полями, давал им класс CSS' error' затем добавлен настраиваемый атрибут, например 'data-field = 'username''. Затем мой обратный вызов Ajax сканирует форму, ищущую 'div.error', с' $ (this) .data (response.field) ', поскольку объекты Spring' bindingResult' имеют на них имя поля. Опять же, моя проблема делает эти поля 'defaultMessage' более дружественными. – Mark
Привет, Марк, Спасибо за головы, у меня было что-то подобное, но, будучи новым для многих технологий в этом проекте (весна mvc/jquery и т. Д.), У меня действительно крутая кривая обучения. Не могли бы вы поделиться своим кодом - то есть формой/divs и функцией обратного вызова ajax? Это действительно помогло бы. – Steve
Марк - я собираюсь закодировать это - ваш пример спасет меня от боли, если вы можете помочь? – Steve