一个非常简单的 JSF 应用程序:
- InputText 元素分配有 Validator。
- f:ajax 用于渲染下一个元素(phoneNumber),方法是使用
blur
event.
- 仅当 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>
托管Bean
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>
或者从电话号码中删除渲染
rendered="#{person.isValid}"
由于某种原因,具有特定元素 Id 的 f:ajax 和基于 ManagedBean 属性渲染的无法共存。
大家有什么想法或建议吗?
注意:当我使用侦听器而不是验证器时也会发生这种行为
The f:ajax
在客户端运行。中指定的元素render
必须已经存在于客户端 HTML DOM 树中。例如将其放入h:panelGroup
相反,它总是呈现给客户端。
<h:panelGroup id="phoneLabel">
<h:outputText rendered="#{person.isValid}" value="#{person.phoneNumber}" />
</h:panelGroup>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)