2010-11-10 16 views
6

A muy simple applicaton JSF:JSF h: validación inputText y f: ajax rinden

  • elemento InputText se asigna con validador.
  • f: ajax se utiliza para representar el siguiente elemento (phoneNumber) mediante el evento blur.
  • Fax sólo se mostrará si inputText pasar el validador y el valor booleano isValid se establece en true

Aquí es el fragmento de código

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

El problema es , por alguna razón, phoneNumber no se representa en absoluto.

La única manera que puedo hacer que funcione es cambiando f: ajax para hacer @form

<h:inputText id="name" maxlength="9" styleClass="ordLabelNarrow" 
    validator="#{person.validateSecurityCode}"        
    value="#{person.name}"> 
    <f:ajax render="@form" event="blur"/>                
</h:inputText> 

o eliminar representan a partir de phoneNumber

rendered="#{person.isValid}" 

Por alguna razón f: ajax, con específica el elemento Id y representado según managedBean Attribute no puede coexistir.

Alguna idea o consejo chicos?

NOTA: Este comportamiento también ocurre cuando se utiliza en lugar del oyente validador

Respuesta

7

El f:ajax opera en el lado del cliente. El elemento que se especifica en render ya debe estar presente en el árbol DOM HTML del lado del cliente. Por ejemplo, póngalo en un h:panelGroup que siempre se representa en el lado del cliente.

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