Установка недопустимого начального состояния компонента JSF

У меня есть небольшое приложение JSF, в котором пользователю необходимо ввести некоторые данные о себе. Для каждого компонента на странице с required="true" я хочу показать значок в зависимости от того, есть ли данные в поле или нет.

Моя проблема в том, что при первоначальном отображении страницы все поля действительны, даже если в них нет данных.

Итак, мой вопрос: как я могу сделать компонент недействительным в зависимости от того, есть ли данные в поле или нет?

После отправки страницы (или после того, как компонент теряет фокус) значок отображается правильно, проблема возникает только при начальной загрузке страницы. (т.е. нет почтовых данных)

Вот мой xhtml для компонента, который необходимо проверить:

<s:decorate id="employeeIdDecoration" template="/general/util/errorStyle.xhtml">
<ui:define name="label">#{messages['userdetails.employeeId']}</ui:define>
<h:inputText value="#{authenticator.user.employeeId}" required="true">
    <a4j:support event="onblur" reRender="employeeIdDecoration" bypassUpdates="true"/>
</h:inputText>

the template:

<s:label styleClass="#{invalid?'error':''}">
        <ui:insert name="label"/>
        <s:span styleClass="required" rendered="#{required}">*</s:span>
    </s:label>
    <span class="#{invalid?'error':''}">
        <s:validateAll>
            <ui:insert/>
        </s:validateAll>
            <h:graphicImage value="/resources/redx.png" rendered="#{invalid}"
                            height="16"
                            width="16"
                            style="vertical-align:middle;"/>
            <h:graphicImage value="/resources/Checkmark.png" rendered="#{!invalid}"
                            height="16"
                            width="16"
                            style="vertical-align:middle;"/>
    </span>

Любая помощь будет оценена.


person mhylle    schedule 05.06.2010    source источник


Ответы (1)


Ты сможешь:

  • на window.onload() повторите все входные данные с помощью javascript и вызовите событие размытия
  • на window.onload() вызовите <a4j:jsFunction>, который reRender является родителем <h:panelGroup> для всех входов.
person Bozho    schedule 05.06.2010
comment
Спасибо, Божо, я реализовал версию, в которой я использую a4j:jsFunction для запуска проверки, и это работает :) Было бы неплохо установить состояние компонента, не прибегая к отправке панели (вы можете просто увидеть состояние компонент меняется при открытии страницы), но я могу жить с этим решением. - person mhylle; 06.06.2010