2012-06-22 5 views
0

Я работаю над веб-приложением 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 и работал с этой валидацией, но я не могу найти ответ.

ответ

1

Я сталкиваюсь с аналогичной проблемой, то есть отправляю форму с помощью jQuery. В настоящее время я просто вернув bindingresult в виде строки из контроллера, используя:

return bindingResult.getAllErrors() 

В качестве временного решения в то время разработки приложения, я синтаксический анализ возвращаемых данных JSON и просто показывая defaultMessage (ы) в всплывающее окно предупреждения.

Удалось ли каким-либо образом вернуть возвращенные json defaultmessage (s) с соответствующими элементами ввода формы?

Было бы очень интересно услышать, как вы справлялись с этим (подробно), поскольку на самом деле не так много в плане документации об этом, либо с весны, либо иначе.

+0

То, что я закончил делать, чтобы получать сообщения рядом с полями, было похоже на теги Spring 'form', я добавляю новый' div 'рядом со всеми полями, давал им класс CSS' error' затем добавлен настраиваемый атрибут, например 'data-field = 'username''. Затем мой обратный вызов Ajax сканирует форму, ищущую 'div.error', с' $ (this) .data (response.field) ', поскольку объекты Spring' bindingResult' имеют на них имя поля. Опять же, моя проблема делает эти поля 'defaultMessage' более дружественными. – Mark

+0

Привет, Марк, Спасибо за головы, у меня было что-то подобное, но, будучи новым для многих технологий в этом проекте (весна mvc/jquery и т. Д.), У меня действительно крутая кривая обучения. Не могли бы вы поделиться своим кодом - то есть формой/divs и функцией обратного вызова ajax? Это действительно помогло бы. – Steve

+0

Марк - я собираюсь закодировать это - ваш пример спасет меня от боли, если вы можете помочь? – Steve

Смежные вопросы