Установка исходного состояния компонента JSF на недопустимое - PullRequest
1 голос
/ 06 июня 2010

У меня есть небольшое приложение JSF, где пользователь должен ввести некоторые данные о себе. Для каждого компонента на странице, который требует = "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>

шаблон:

<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>

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

1 Ответ

1 голос
/ 06 июня 2010

Вы можете:

  • на window.onload() переберите все входные данные с помощью javascript и вызовите событие размытия
  • на window.onload() вызов <a4j:jsFunction>, который reRender является родителем <h:panelGroup> для всех входов.
...