2010-11-10 13 views
6

işlemek çok basit bir MTU Applicaton:MTU h: inputText doğrulama ve f: ajax

  • InputText elemanı Validator ile atanır.
  • f: ajax, blur olayını kullanarak bir sonraki öğeyi (phoneNumber) oluşturmak için kullanılır. inputText doğrulayıcı ve isValid boolean değerini geçerse
  • PhoneNumber sadece görüntülenecektir true olarak ayarlanır Burada

sorundur

public void validatePerson(FacesContext context, UIComponent toValidate, Object value) { 
    name = ((String) value).toUpperCase(); 
    phoneNumber = "12345678"; 
    isValid = true; 
} 

<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 Kod parçacığı bir nedenden dolayı, phoneNumber hiç işlenmez. Ben iş yapabilir

tek yolu f değiştirerek geçerli: ajax @form

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

işlemek için Veya bazı nedeni f İçin phonenumber

rendered="#{person.isValid}" 

tarihleri ​​arasında oluşturulan kaldır: Belirli ile ajax öğe Kimliği ve managedBean Niteliğine dayalı olarak oluşturulanlar birlikte kullanılamaz.

Herhangi bir fikir veya tavsiye beyni?

NOT: Ben dinleyici yerine doğrulayıcı kullandığınızda bu davranış da olur f:ajax istemci tarafında çalışır

cevap

7

. render'da belirtilen öğe, istemci tarafı HTML DOM ağacında zaten mevcut olmalıdır. Örneğin, her zaman istemci tarafına işlenen bir h:panelGroup içine koyun.