JSF: лучший способ проверить наличие <h: message for = "id" /> - PullRequest
20 голосов
/ 24 декабря 2010

У меня есть форма, в которой сообщение об ошибке проверки должно отображаться под элементами ввода. Ошибка должна быть выделена, показывая сообщение об ошибке вокруг сообщения об ошибке и вводимый текст.

Для этого мне нужно проверить наличие h: messages для отдельных элементов. Я могу проверить наличие глобальных сообщений об ошибках следующим образом

<h:panelGroup rendered="#{not empty facesContext.messages}"> 
</h:panelGroup>

Как я могу проверить то же самое для определенного идентификатора клиента (скажем, имя). Так что-то вроде

faceContent.messages("creditCardNo")

Решение, которое я имею в настоящее время, состоит в том, чтобы создать собственный распознаватель, но мне было интересно, есть ли лучшее решение.

Ответы [ 2 ]

21 голосов
/ 24 декабря 2010

Ошибка должна быть выделена, показывая пузырь ошибки вокруг сообщения об ошибке ...

Просто используйте <h:message> с классом стилей, в котором вы определяетежелаемый стиль.

<h:inputText id="foo" />
<h:message for="foo" styleClass="error" />

с

.error {
    border: 1px solid red;
    background: pink;
}

... и введенный текст.

Просто проверьте, является ли UIInput#isValid() true.Начиная с JSF 2.0 текущий компонент доступен неявной переменной EL #{component}.

<h:inputText styleClass="#{!component.valid ? 'error' : 'none'}" />

Что касается фактического вопроса о проверке наличия сообщения для определенного идентификатора клиента, тогда вы можете найти этот ответ интересным.Но я не думаю, что это применимо в вашем конкретном случае.


Обновление : согласно комментариям, вы, кажется, хотите стилизовать содержащий компонент вместо invididualкомпоненты.В этом случае сделайте следующее:

<h:panelGroup styleClass="#{!foo.valid ? 'error' : 'none'}">
    <h:inputText id="foo" binding="#{foo}" />
    <h:message for="foo" />
</h:panelGroup>
0 голосов
/ 03 июня 2014

Я использую bootstrap, и мне это тоже нужно ... решил это путем создания пользовательской оболочки компонента.

<composite:interface>
    <composite:attribute name="casoCustomFieldValue" required="true" />
    <composite:attribute name="casoOpen" default="true" />
</composite:interface>

<composite:implementation>

    <h:panelGroup styleClass="#{not empty facesContext.getMessageList(''.concat(cc.clientId).concat(':valortext')) ? 'form-group has-error' : 'form-group'}"
                  rendered="#{cc.attrs.casoCustomFieldValue.customField.fieldTypeId.fieldTypeId eq 'TEXT'}" >
        <p:inputText id="valortext" value="#{cc.attrs.casoCustomFieldValue.valor}" styleClass="form-control input-sm"
                 required="#{cc.attrs.casoCustomFieldValue.customField.required}" requiredMessage="Se necesita un valor." disabled="#{not cc.attrs.casoOpen}"/>
        <h:panelGroup rendered="#{not empty facesContext.getMessageList(''.concat(cc.clientId).concat(':valortext'))}" styleClass="help-block">
            <h:message for="valortext" />
        </h:panelGroup>
    </h:panelGroup>



</composite:implementation>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...