Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> данные от пользователя + EJB. валидация приходящих параметров 
:(
    Опции темы
polosatij
  Дата 15.4.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8




в бине EJB можно увидеть следующее:

Код

    @Length(min=1, max=32)
    @Column(name="USERNAME", nullable=false, unique=true)
    public String getUsername() {
        return this.username;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }


а значит, длинна Username не может быть меньше чем 1 и больше чем 32..

вопрос..

со страницы приходят данные от пользователя (input и form).. если попробовать добавить эти данные в EJB, возможно будет кинут Exception, т.к. например, юзер может поле вообще не заполнить.. как вернуться назад на страницу и показать именно то поле, в котором был брошен Exception? Можно как вариант писать <javascript> для валидации. Oднако чем больше страниц, тем больше нужно перерабатывать скрипта.. Данные со страницы приходят в Servlet, если валидировать их там, опять-таки проблема => слишком много всего, да и зачем, если правила установлены в EJB? как и где решить проблему валидации данных?  smile 




--------------------
PM   Вверх
Mikamj
Дата 16.4.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 19.2.2007
Где: Владимир

Репутация: 1
Всего: 1



Цитата(polosatij @ 15.4.2007,  14:52)
как и где решить проблему валидации данных?  smile

Валидацию нужно производить в веб-слое. Например так:
У вас есть класс UserInfo, который представляет собой оболочку над данными пользователя (простой JavaBean). В сервлете вы извлекаете данные, которые ввел пользователь, и кладете их в объект UserInfo.
Далее вызываете на нем метод, например validate. Если он вернул false - открываем эту же страницу с выводом сообщения об ошибке, без обращения к EJB-слою.
Чтобы сервлет не был огромный, рекомендую написать для каждого действия (например, отображение формы для добавления, собственно добавление и т.д.) отдельный класс-action, который вызывается из сервлета.
PM WWW ICQ   Вверх
polosatij
  Дата 16.4.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8





угу.. ты говоришь это, поскольку работаешь со Struts  smile 

а зачем нужна двойная валидация данных?  smile  может быть как-нибудь только одну валидацию можно красиво сделать?  smile 


--------------------
PM   Вверх
Mikamj
Дата 17.4.2007, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 19.2.2007
Где: Владимир

Репутация: 1
Всего: 1



Цитата(polosatij @ 16.4.2007,  13:23)
угу.. ты говоришь это, поскольку работаешь со Struts  smile 

а зачем нужна двойная валидация данных?  smile  может быть как-нибудь только одну валидацию можно красиво сделать?  smile

Нет, со Struts я не работаю.
Двойная валидация конечно не нужна.
Просто уберите ограничение из EJB.
PM WWW ICQ   Вверх
polosatij
  Дата 17.4.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



Цитата(Mikamj @  17.4.2007,  07:13 Найти цитируемый пост)
Просто уберите ограничение из EJB. 



хм... нет..  smile  этого делать я 1. не могу (т.к. по этим ограничениям EJB строит таблицы в базе данных), 2. не буду - т.к. там сразу видно что и где, и практически нельзя пропустить ошибку (!)

Добавлено через 5 минут и 49 секунд


странно, что никто не может мне с этим помочь.. неужели никто для веба не использует EJB? smile 


--------------------
PM   Вверх
Mikamj
Дата 17.4.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 19.2.2007
Где: Владимир

Репутация: 1
Всего: 1



Я нигде не видел, чтобы валидация данных производилась в EJB. Во всех фреймворках предусмотрена валидация в вебе.
Что если вам нужно будет валидировать не только длину строки? Тут аннотации не помогут...
PM WWW ICQ   Вверх
polosatij
Дата 17.4.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



Цитата(Mikamj @  17.4.2007,  19:03 Найти цитируемый пост)
Я нигде не видел, чтобы валидация данных производилась в EJB.


валидация данных в EJB нужна для того, чтоб не писать ерунду в БД..  smile 


Цитата(Mikamj @  17.4.2007,  19:03 Найти цитируемый пост)
Что если вам нужно будет валидировать не только длину строки? Тут аннотации не помогут... 


ещё как помогут  smile 
пожалуйста почитайте EJB 3.0  smile

Добавлено через 2 минуты и 14 секунд


я думаю так.. придётся писать javaScript для валидации на клиенте и оставлять EJB анотации для ДБ..  smile 


--------------------
PM   Вверх
Mikamj
Дата 18.4.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 19.2.2007
Где: Владимир

Репутация: 1
Всего: 1



Вы гибернейт я так понял используете, а не Java Persistence API?
Я с ним не работал, не знаю какие там еще аннотации есть.
Валидация с помощью JavaScript бесполезна - пользователь может просто отключить его.
PM WWW ICQ   Вверх
polosatij
Дата 18.4.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



Цитата(Mikamj @  18.4.2007,  13:13 Найти цитируемый пост)
Валидация с помощью JavaScript бесполезна - пользователь может просто отключить его. 



я знаю, однако в моём случае, при выключенном JS вообще нельзя будет загрузить страницу.. у меня всё построено на AJAX-е.. а если пользователь зайдёт на сайт и выключит JS, тогда он не сможет отослать сообщение вообще.. а если он сам сконфигурирует такое сообщение, то "плохие" данные не пустит парсер EJB в БД..  smile какие есть ещё варианты?

мне одно не нравится, если писать отдельный JS для страниц, значит можно точно где-то что-то забыть.. хм.. может написать тоолсу, чтоб сама JS из анотаций EJB генерировала?  smile 


--------------------
PM   Вверх
Mikamj
Дата 18.4.2007, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 19.2.2007
Где: Владимир

Репутация: 1
Всего: 1



Пользователь, если найдется умник какой-нибудь, может отредактировать ваш JavaScript для валидации данных как ему угодно и отправить запрос на сервер с некорректными данными.
PM WWW ICQ   Вверх
chief39
Дата 18.4.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(polosatij @  15.4.2007,  14:52 Найти цитируемый пост)
т.к. например, юзер может поле вообще не заполнить.. 

Цитата(polosatij @  15.4.2007,  14:52 Найти цитируемый пост)
@Length(min=1, max=32)

Дык... тогда, я так понимаю, для возможности незаполненных полей надо писать мин=0 smile 

Цитата(polosatij @  15.4.2007,  14:52 Найти цитируемый пост)
как вернуться назад на страницу и показать именно то поле, в котором был брошен Exception?

А каков характер ксепшна(я просто не юзал) Имя поля не фигурирует?

Насчёт двойной проверки - а если у нас ещё ограничение и в БД длиной поля и индеском некое - дык вообще тройная проверка smile))
Но это, не так страшно, если БД автосоздаётся из еджиби.


Лично я делал так(еджиби 2.1) - в сешн бине проверял вручную нужные поля и наверх кидал ксепшн с дополнительными переменными о поле, характере ошибки и проч. А веб клиент тянул по таким готовым ксепшнам нужные сообщения.

Если саовцы задумали сразу такое ограничение - или доп. проверка а-ля юник индекс в базе, или нормальный механизм с коллбэком(какой, всё-таки, ксепшн кидает?).
Если первое - лучше проверять самому в бине.

Кста... сервлеты с энтити директли работают??? я бы порекомендовал сешн бин в качестве сешн фасада.... smile 
Раз уж еджиби есть в проекте - то надо уж использовать его преимущества...

Добавлено через 4 минуты и 32 секунды
Цитата(Mikamj @  18.4.2007,  15:55 Найти цитируемый пост)
Пользователь, если найдется умник какой-нибудь, может отредактировать ваш JavaScript для валидации данных как ему угодно и отправить запрос на сервер с некорректными данными. 

Кста, такую проверку мы добавляли по возможности третьим слоем(кроме БД ограничений и логики фасада) в джаваскрипт. Житропопозакрученый юзер, конечно, может поправить js... smile Но! дальше фаскада такое хитрожопство не пройдёт. Да и страницы разные могут фасад трогать.
А сделали зачем? да просто для того, чтоб для 99% юзеров не перегружать страничку, а тут же показывать ошибки. Конечно, в случаях, когда заранее известно что ограничение не будет меняться раз в месяц и не придётся везде его поддерживать...


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
polosatij
Дата 18.4.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



Цитата(Mikamj @  18.4.2007,  15:55 Найти цитируемый пост)
Пользователь, если найдется умник какой-нибудь, может отредактировать ваш JavaScript для валидации данных как ему угодно и отправить запрос на сервер с некорректными данными. 



пожалуйста почитайте EJB 3.0  smile 


Цитата(chief39 @  18.4.2007,  16:15 Найти цитируемый пост)
Дык... тогда, я так понимаю, для возможности незаполненных полей надо писать мин=0


можно просто required=true  smile 


Цитата(chief39 @  18.4.2007,  16:15 Найти цитируемый пост)
А каков характер ксепшна(я просто не юзал) Имя поля не фигурирует?



вроде бы нет, но надо бы посмотреть ещё раз..  smile  однако я не смогу пересылать пользователя из EJB обратно на страницу, слишком много гимороя  smile 

Цитата(chief39 @  18.4.2007,  16:15 Найти цитируемый пост)
а если у нас ещё ограничение и в БД длиной поля и индеском некое


нет.. это анотации решают  smile 

Цитата(chief39 @  18.4.2007,  16:15 Найти цитируемый пост)
я бы порекомендовал сешн бин в качестве сешн фасада.... smile 


угу.. всех в топку, кто неправилъно заполнит.. нефиг сервер грузить.. пусть сразу отсеиваются  smile 
однако, представляешь, ето на каждую форму JS писать.. это же х.. туча  smile 

может как-нибудь генирировать JS можно? ню, я имею ввиду, не писать очередной велосипед  smile 

угу.. это я ещё не успел посмотреть, тока осваиваю EJB 3.0  smile однако, насколько я понял, сессион беан будет сохранять именно один приходящий случай.. или я не прав?  smile 

 


Цитата(chief39 @  18.4.2007,  16:15 Найти цитируемый пост)
Кста, такую проверку мы добавляли по возможности третьим слоем(кроме БД ограничений и логики фасада) в джаваскрипт.




--------------------
PM   Вверх
polosatij
Дата 19.4.2007, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



нашёл такой велосипед:

http://forum.vingrad.ru/topic-36336.html

 smile 


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1379 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.