一个非常简单的JSF应用程序:
-
InputText元素与Validator一起分配 .
-
f:ajax用于通过
blur
事件呈现下一个元素(phoneNumber) . -
仅当inputText传递验证器且isValid布尔值设置为true时,才会显示PhoneNumber
这是代码片段
<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:具有特定元素Id的ajax和基于managedBean Attribute的呈现不能共存 .
任何想法或建议的家伙?
注意:当我使用侦听器而不是验证器时,也会发生此行为
1 回答
f:ajax
在客户端运行 .render
中指定的元素必须已存在于客户端HTML DOM树中 . 把它放在例如h:panelGroup
中,而不是总是呈现给客户端 .