| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Spring MVC: AJAX-валидация данных формы |
| Автор: MaxPayneC 10.4.2010, 22:31 | ||||
Имеется такой класс (взят из примера, выложенного авторами Spring):
На некоторые его поля, как можно видеть, повешены ограничения - @NotNull, @Future и т.п. Есть контроллер:
Данный подход к организации работы контроллера показался мне очень удобным (аннотациями определяем, какие конкретно урлы на какие методы контроллера идут, и возвращаем соответствующие имена вьюх). Хотелось бы как-то научиться проводить валидацию полей формы на сервере, без "реальной" отправки данных. С использованием фреймворка Struts (для сравнения) это делалось путем отправки на сервер по урлу того же самого экшна сериализованной формы с двумя прилепленными параметрами, экшн проводил валидацию (в соответствии с хмл-файлом, аннотациями или методом validate()) и возвращал текстом JSON-описание возникших ошибок. Если их не было, происходила реальная отправка формы. Данный механизм был мне очень удобен, и поэтому хотелось бы с использованием Spring сделать что-то подобное. Буду признателен за описание или ссылку на описание процесса валидации форм с помощью AJAX, и возможно советы по улучшению подхода к созданию контроллера. Заранее спасибо |
| Автор: MaxPayneC 13.4.2010, 14:53 |
| Ап. Что, никто не делал валидацию на AJAX? |
| Автор: afon 13.4.2010, 15:33 |
| Я делал. Немного не так как у вас, на обычных xml-описанных бинах, но все-таки. В общем, отдельный контроллер, на который шлется ajax-request с объектом command и который проверяет валидность данных. Этот контроллер возвращает вьюху в которой только один результат true|false; форма, сделав ajax вызов методами jquery, парсит результат, и если он true - делает обычный javascript-овый this.form.submit(). Примерно так. PS: или вы хотели прикрутить обычный org.springframework.validation.Validator ? Не думаю что там будет сильно сложнее, наверное в случае ошибки шлете в свою вьху какой-нибудь error объект и всех делов. Если же все success, возворащаете в форму true и редиректите страницу куда надо. Я бы сделал так. |
| Автор: MaxPayneC 13.4.2010, 16:53 |
| А если мне нужны подробности по каждому полю, вызвавшему ошибку? Сериализацию/десериализацию в xml или json надо писать руками, и разбор его на клиенте соответственно, или есть что-то готовое? |
| Автор: afon 14.4.2010, 14:04 |
| xstream к примеру, или flexjson. Достаточно поискать "spring json view" и можно найти на свой вкус несколько разных методов преобразования и возврата данных. Я xstream-ом пользуюсь - http://xstream.codehaus.org/json-tutorial.html. Простая вьюха jsonview, которая вынимает объект (какого нибудь константного имени) из мапы модели и конвертит его, а потом возвращает. Ну а на самой страничке уже jquery работает по разбору json объекта. Примеры тоже есть в массовом количестве |