2010-11-10 10 views
6

bardzo prosty JSF applicaton:JSF H: Walidacja inputText f Ajax czyni

  • inputText element jest przyporządkowany Weryfikator.
  • f: ajax służy do renderowania następnego elementu (phoneNumber) przy użyciu zdarzenia blur.
  • PhoneNumber będzie wyświetlany tylko wtedy, gdy inputText przechodzą walidatora i IsValid wartość logiczną ma wartość true

Oto fragment kodu

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

Problemem jest to, z jakiegoś powodu numer telefonu nie jest w ogóle renderowany.

Jedyny sposób, że mogę zrobić to praca jest zmiana f: ajax do renderowania @form

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

lub usunąć renderowane PhoneNumber

rendered="#{person.isValid}" 

Z jakiegoś powodu f: ajax konkretnym Identyfikator elementu i wyrenderowany na podstawie atrybutu managedBean nie może współistnieć.

Czy masz pomysł czy rady?

UWAGA: To zachowanie się zdarzyć również, gdy używam słuchacza zamiast walidator

Odpowiedz

7

f:ajax działa po stronie klienta. Element określony w render musi już być obecny w drzewie DOM HTML HTML po stronie klienta. Zamiast tego wstaw na przykład h:panelGroup, który zawsze jest renderowany po stronie klienta.

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