Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > JSF сообщения при валидации и конвертации


Автор: Fedrus 20.9.2007, 15:55
При использовании стандартных валидаторов и конвертеров нужно использовать не стандартные сообщения.
Знаю что можно использовать message bundle file. 
Может кто знает другие решения этой задачи. Но хотелось бы использовать стандартную SUN спецификацию.
Заранее спасибо.

Автор: Maksym 20.9.2007, 16:22
Fedrus
Использовать ResourceBundle -- самое что ни на есть типовое решение. По какой причине оно тебе не подходит?
В принципе, можно перезатирать валидационные сообщения на следующем этапе jsf life cycle (находя их по id компонента, с которым они ассоциированы). Но это не очень кошерно.

Автор: Fedrus 20.9.2007, 16:42
Подумав решили что устраивает.
По теме : может подскажите хорошие пакеты валидаторов и конвертеров?

Автор: Maksym 20.9.2007, 16:53
Fedrus
Так чтобы отдельно валидаторы и конверторы -- такого нет, насколько я знаю.. по крайней мере среди популярных продуктов. Есть единая спецификация jsf, которой должны придерживаться все кто решил ее реализовать. Одна из лучших реализаций -- http://myfaces.apache.org. Но сам MyFaces же и предлагает использовать расширение -- http://myfaces.apache.org/tomahawk/index.html, которое умеет значительно больше, чем написано в jsf спецификации.

Добавлено через 2 минуты и 2 секунды
Например, валидаторы:
  • validateCreditCard
  • validateUrl
  • validateEmail
  • validateEqual
  • validateRegExpr
ну и много другого полезного.



Автор: Fedrus 20.9.2007, 16:58
Огромное спасибо за ответ.

Автор: Fedrus 24.9.2007, 11:53
По теме:
Используем MyFaces Tomahawk, у валидаторов есть атрибут message там и можно указывать текст))
но вот проблемка появилась с выводом текста сообщения. При использовании <h:message for=     все ок выводит.
Но при использовании <h:messages выводит какойто квадратик и все, могу конечьно написать для каждого поля massage но считаю что так не очень правильно. пробовал t:massages не помогло.
Еще один вопрос : при использовании атрибута required можно ли задавать текст ошибки не через бандлы( вроде гдето видел атрибут mesagesRequired )

Добавлено @ 11:58
По первому вопросу оказалось все просто:
Нужно в <h:messages добавить showDetail="true" и все ок.Но почемуто не работает style="color:red"

Атрибут requiredMesage появился в JSF 1.2 а в MyFaces нет такого( но пришла идея я использую 
Код

<t:validateRegExpr pattern='[a-zA-Z0-9]*' message="Login is not valid: only chars and nums"/></h:inputText>    


Нужно чтоб оно еще и обязательным для заполнения было, не могли бы мне кто-нибудь подсказать как изменить регулярное выражение чтоб оно пропускало больше n символов и только буквы и цифры.
Заранее спасибо.

Автор: Maksym 24.9.2007, 12:42
Цитата(Fedrus @  24.9.2007,  11:53 Найти цитируемый пост)
Но почемуто не работает style="color:red"

Должно работать. Как вариант попробуй описать стиль отдельно и задать его в styleClass.


Автор: Fedrus 24.9.2007, 12:51
Атрибут requiredMesage появился в JSF 1.2 а в MyFaces нет такого( но пришла идея я использую 
Код

<t:validateRegExpr pattern='[a-zA-Z0-9]*' message="Login is not valid: only chars and nums"/></h:inputText>   
 
Нужно чтоб поле еще и обязательным для заполнения было, не могли бы мне кто-нибудь подсказать как изменить регулярное выражение чтоб оно пропускало больше n символов и только буквы и цифры.(и тогда можно просто дописать что поле должно содержать буквы и цифры и более 3 символов)
Заранее спасибо.

Автор: Fedrus 24.9.2007, 15:00
Регулярное выражение получается таким :  [a-zA-Z0-9]{3,} 
которое говорит что должнобыть не менее 3 символов заданного диапазона но вот когда вообще нет символов оно не срабатывает((
есть какие предложения(вообще странно вычитал это из статьи))

Добавлено через 9 минут и 25 секунд
regex везде свой это была к пхп статья сейчас ищу для java найду напишу

Автор: nornad 24.9.2007, 15:14
Цитата(Fedrus @  24.9.2007,  15:51 Найти цитируемый пост)
как изменить регулярное выражение чтоб оно пропускало больше n

Цитата(Fedrus @  24.9.2007,  18:00 Найти цитируемый пост)
но вот когда вообще нет символов оно не срабатывает((

Ты уже определись, что тебе надо.  smile 

Цитата(Fedrus @  24.9.2007,  18:00 Найти цитируемый пост)
regex везде свой

Основа одна

Автор: Maksym 24.9.2007, 15:27
Цитата

message="Login is not valid: only chars and nums"

Это не хорошо, ко всем ресурсам нужно доступаться через какую-нибудь реализацию ResourceBundle (который физически может доставать их откуда угодно: .properies, .xml, DB, другие источники) -- это типовой подход (а использование любых hardcoded вещей -- гвоздь в гроб нормальной архитектуры).

Автор: Fedrus 24.9.2007, 15:33
Основа одна имплементация разная в PHP ^[a-zA-Z0-9]+$ будеть говорить что обязательно один символ и возможно более в заданном диапазоне а у меня ничего кроме того, что в заданном диапазоне, не говорит и пустое значение пропускает(

Добавлено @ 15:37
Дело в том что мой непосредственный начальник не хочет использовать ResourceBundle ((
Эх надо подуамть как его убедить в обратном...
Надо чтоб подходила строка состоящая из 3 и более букв или цифр

Автор: nornad 24.9.2007, 16:07
Цитата(Fedrus @  24.9.2007,  18:33 Найти цитируемый пост)
пустое значение пропускает(

Что значит пропускает? Оно (пустое значение) и не должно попадать в матч-резалт. Твоё же выражение этого и не позволяет.
А крышу и бакс в явовских регэкспах тоже можно юзать.

Автор: Fedrus 24.9.2007, 16:27
Спасибо за помощь и прошу прощения за непонятность излагания вопроса.
На JSF странице у поле
Код

<h:messages style = "color:darkred" showDetail="true"></h:messages>
<h:inputText id="login" value="#{user.user.login}" size="50"
                    maxlength="50">
                    <t:validateRegExpr pattern='[a-zA-Z0-9]{3,}'   
                    message="Login is not valid: only chars and nums123"/>
</h:inputText>            
    

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

Автор: Fedrus 24.9.2007, 16:58
Я могу использовать ResourceBundle могу там описать текст ошибки которая выбрасывается при незаполнеии поля с атрибутом required.
Но там может быть лиш текст одного вида мол : Поле #{ЛААЛА}  обязательно для заполнения и больше 3 символов.
А если мне надо будет больше 4 или еще что.
Может ктонить знает как сделать так чтоб в любом случае вызывался  <t:validateRegExpr ??

Автор: Zamuta 25.9.2007, 00:28
С выходом 6-го нетбинса и его встроенными woodstock'овскими компонентами можно к любому компоненту (который по смыслу допускает валидацию) повесить необходимый requiredMessage, converterMessage или validatorMessage.

Автор: Fedrus 25.9.2007, 09:29
Cпасибо за вариант)
Ну я еще раз поговорил с начальником, и объяснил необходимость и удобства использования ResourceBundle.

Автор: Fedrus 25.9.2007, 13:57
Вот так дааа я удивлен проблема осталась с выводом своего текста ошибки required поля. Возможно из-за использования MyFaces.
я описал ее значение в messages.properties :
Код

javax.faces.component.UIInput.REQUIRED=Please enter the required value.
javax.faces.component.UIInput.REQUIRED_detail=Please enter the required value.
javax.faces.validator.LengthValidator.MINIMUM=ADSFSFAF
javax.faces.validator.LengthValidator.MINIMUM_detail=ASDASDETAIL
fed=fed



на странице сначала пробовал:
Код

<f:loadBundle  basename="messages" var="msgs"/>
<h:messages style = "color:darkred" showDetail="true"></h:messages>
<h:outputText value="#{msgs.fed}"/>

Потом искал в гугле и попробовал так:
Код

<f:loadBundle  basename="org.apache.myfaces.examples.resource.example_messages" var="msgs"/>
<h:messages style = "color:darkred" showDetail="true"></h:messages>
<h:outputText value="#{msgs.fed}"/>


Не почему-то не берется текст ошибок из messages.properties пробовал и javax.faces.validator.LengthValidator.MINIMUM тоже не берется (
а #{msgs.fed} нормально работает.
МОжет кто сталкивался с этой проблемой и знает решение?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)