Очень простое приложение JSF:
- Элемент InputText назначается с помощью Validator.
- f: ajax используется для визуализации следующего элемента (phoneNumber) с использованием события
blur
. - PhoneNumber будет отображаться только в том случае, если inputText передает валидатор, а для логического значения isValid установлено значение true
Вот фрагмент кода
<h:form id="invOrdersWizForm">
<h:inputText id="name" maxlength="9" styleClass="ordLabelNarrow"
validator="#{person.validatePerson}"
value="#{person.name}">
<f:ajax render="phoneLabel" event="blur"/>
</h:inputText>
<h:outputText id="phoneLabel"
rendered="#{person.isValid}"
styleClass="ordLabelWide" value="#{person.phoneNumber}" />
</h:form>
ManagedBean
public void validatePerson(FacesContext context, UIComponent toValidate, Object value) {
name = ((String) value).toUpperCase();
phoneNumber = "12345678";
isValid = true;
}
Проблема в том, что по какой-то причине phoneNumber вообще не отображается.
Единственный способ заставить его работать - это изменить f: ajax для рендеринга @ form
<h:inputText id="name" maxlength="9" styleClass="ordLabelNarrow"
validator="#{person.validateSecurityCode}"
value="#{person.name}">
<f:ajax render="@form" event="blur"/>
</h:inputText>
Или удалить отрендеренный с phoneNumber
rendered="#{person.isValid}"
По какой-то причине f: ajax с определенным идентификатором элемента и визуализированный на основе атрибута managedBean не может сосуществовать.
Любая идея или совет, ребята?
ПРИМЕЧАНИЕ: такое поведение также происходит, когда я использую слушатель вместо валидатора