Java JSF h:inputText验证和f:ajax呈现

Java JSF h:inputText验证和f:ajax呈现,java,jsf,jsf-2,Java,Jsf,Jsf 2,一个非常简单的JSF应用程序: InputText元素已分配给验证器 f:ajax通过使用blurevent来渲染下一个元素(phoneNumber) 仅当inputText通过验证程序且isValid布尔值设置为true时,才会显示PhoneNumber 下面是代码片段 <h:form id="invOrdersWizForm"> <h:inputText id="name" maxlength=

一个非常简单的JSF应用程序:

  • InputText元素已分配给验证器
  • f:ajax通过使用
    blur
    event来渲染下一个元素(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>
问题是,出于某种原因,phoneNumber根本没有呈现

我能让它工作的唯一方法是将f:ajax更改为render@form

<h:inputText id="name" maxlength="9" styleClass="ordLabelNarrow"
    validator="#{person.validateSecurityCode}"                              
    value="#{person.name}">
    <f:ajax render="@form" event="blur"/>                                                               
</h:inputText>  
由于某些原因,具有特定元素Id且基于managedBean属性呈现的f:ajax不能共存

有什么想法或建议吗


注意:当我使用listener而不是validator时,这种行为也会发生。
f:ajax
在客户端运行。
render
中指定的元素必须已存在于客户端HTML DOM树中。例如,将其放入始终呈现给客户端的
h:panelGroup

<h:panelGroup id="phoneLabel">
    <h:outputText rendered="#{person.isValid}" value="#{person.phoneNumber}" />
</h:panelGroup>

    rendered="#{person.isValid}"
<h:panelGroup id="phoneLabel">
    <h:outputText rendered="#{person.isValid}" value="#{person.phoneNumber}" />
</h:panelGroup>