Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java EE (J2EE) и Spring > данные от пользователя + EJB. |
Автор: polosatij 15.4.2007, 14:52 | ||
в бине EJB можно увидеть следующее:
а значит, длинна Username не может быть меньше чем 1 и больше чем 32.. вопрос.. со страницы приходят данные от пользователя (input и form).. если попробовать добавить эти данные в EJB, возможно будет кинут Exception, т.к. например, юзер может поле вообще не заполнить.. как вернуться назад на страницу и показать именно то поле, в котором был брошен Exception? Можно как вариант писать <javascript> для валидации. Oднако чем больше страниц, тем больше нужно перерабатывать скрипта.. Данные со страницы приходят в Servlet, если валидировать их там, опять-таки проблема => слишком много всего, да и зачем, если правила установлены в EJB? как и где решить проблему валидации данных? ![]() |
Автор: Mikamj 16.4.2007, 08:20 | ||
Валидацию нужно производить в веб-слое. Например так: У вас есть класс UserInfo, который представляет собой оболочку над данными пользователя (простой JavaBean). В сервлете вы извлекаете данные, которые ввел пользователь, и кладете их в объект UserInfo. Далее вызываете на нем метод, например validate. Если он вернул false - открываем эту же страницу с выводом сообщения об ошибке, без обращения к EJB-слою. Чтобы сервлет не был огромный, рекомендую написать для каждого действия (например, отображение формы для добавления, собственно добавление и т.д.) отдельный класс-action, который вызывается из сервлета. |
Автор: polosatij 16.4.2007, 13:23 |
угу.. ты говоришь это, поскольку работаешь со Struts ![]() а зачем нужна двойная валидация данных? ![]() ![]() |
Автор: Mikamj 17.4.2007, 07:13 | ||
Нет, со Struts я не работаю. Двойная валидация конечно не нужна. Просто уберите ограничение из EJB. |
Автор: polosatij 17.4.2007, 13:32 |
хм... нет.. ![]() Добавлено через 5 минут и 49 секунд странно, что никто не может мне с этим помочь.. неужели никто для веба не использует EJB? ![]() |
Автор: Mikamj 17.4.2007, 19:03 |
Я нигде не видел, чтобы валидация данных производилась в EJB. Во всех фреймворках предусмотрена валидация в вебе. Что если вам нужно будет валидировать не только длину строки? Тут аннотации не помогут... |
Автор: Mikamj 18.4.2007, 13:13 |
Вы гибернейт я так понял используете, а не Java Persistence API? Я с ним не работал, не знаю какие там еще аннотации есть. Валидация с помощью JavaScript бесполезна - пользователь может просто отключить его. |
Автор: polosatij 18.4.2007, 15:20 | ||
я знаю, однако в моём случае, при выключенном JS вообще нельзя будет загрузить страницу.. у меня всё построено на AJAX-е.. а если пользователь зайдёт на сайт и выключит JS, тогда он не сможет отослать сообщение вообще.. а если он сам сконфигурирует такое сообщение, то "плохие" данные не пустит парсер EJB в БД.. ![]() мне одно не нравится, если писать отдельный JS для страниц, значит можно точно где-то что-то забыть.. хм.. может написать тоолсу, чтоб сама JS из анотаций EJB генерировала? ![]() |
Автор: Mikamj 18.4.2007, 15:55 |
Пользователь, если найдется умник какой-нибудь, может отредактировать ваш JavaScript для валидации данных как ему угодно и отправить запрос на сервер с некорректными данными. |
Автор: chief39 18.4.2007, 16:15 | ||||
Дык... тогда, я так понимаю, для возможности незаполненных полей надо писать мин=0 ![]()
А каков характер ксепшна(я просто не юзал) Имя поля не фигурирует? Насчёт двойной проверки - а если у нас ещё ограничение и в БД длиной поля и индеском некое - дык вообще тройная проверка ![]() Но это, не так страшно, если БД автосоздаётся из еджиби. Лично я делал так(еджиби 2.1) - в сешн бине проверял вручную нужные поля и наверх кидал ксепшн с дополнительными переменными о поле, характере ошибки и проч. А веб клиент тянул по таким готовым ксепшнам нужные сообщения. Если саовцы задумали сразу такое ограничение - или доп. проверка а-ля юник индекс в базе, или нормальный механизм с коллбэком(какой, всё-таки, ксепшн кидает?). Если первое - лучше проверять самому в бине. Кста... сервлеты с энтити директли работают??? я бы порекомендовал сешн бин в качестве сешн фасада.... ![]() Раз уж еджиби есть в проекте - то надо уж использовать его преимущества... Добавлено через 4 минуты и 32 секунды
Кста, такую проверку мы добавляли по возможности третьим слоем(кроме БД ограничений и логики фасада) в джаваскрипт. Житропопозакрученый юзер, конечно, может поправить js... ![]() А сделали зачем? да просто для того, чтоб для 99% юзеров не перегружать страничку, а тут же показывать ошибки. Конечно, в случаях, когда заранее известно что ограничение не будет меняться раз в месяц и не придётся везде его поддерживать... |
Автор: polosatij 18.4.2007, 20:01 | ||||||||
пожалуйста почитайте EJB 3.0 ![]()
можно просто required=true ![]()
вроде бы нет, но надо бы посмотреть ещё раз.. ![]() ![]() нет.. это анотации решают ![]() угу.. всех в топку, кто неправилъно заполнит.. нефиг сервер грузить.. пусть сразу отсеиваются ![]() однако, представляешь, ето на каждую форму JS писать.. это же х.. туча ![]() может как-нибудь генирировать JS можно? ню, я имею ввиду, не писать очередной велосипед ![]() угу.. это я ещё не успел посмотреть, тока осваиваю EJB 3.0 ![]() ![]()
|
Автор: polosatij 19.4.2007, 06:38 |
нашёл такой велосипед: http://forum.vingrad.ru/topic-36336.html ![]() |