2013-08-27 93 views
3

驗證器類:如何驗證ajax請求失敗時使用Primefaces突出顯示UIInput?

@FacesValidator("br.gov.valec.sicpd.util.CpfValidator") 
public class CpfValidator implements Validator { 

    @Override 
    public void validate(FacesContext context, UIComponent component, Object value) 
     throws ValidatorException { 
     if (validateCpf(value.toString())) { 
      FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid Input","Invalid Input"); 
      ((UIInput) component).setValid(false); // this line doesnt work 

     throw new ValidatorException(msg); 
    } 
} 

JSF片段:

<p:inputText label="CPF" id="inputCpf" 
        value="#{mainBean.owner.cpf}"> 
        <f:validator validatorId="br.gov.valec.sicpd.util.CpfValidator" /> 
        <p:ajax event="change" update="inputNameOwner" 
         listener="#{mainBean.searchOwner}" /> 
</p:inputText> 

當表單被經由命令按鈕primefaces提交自動突出顯示它。當ajax被觸發並且驗證失敗時,我該如何實現?

回答

3

UIInput#setValid(false)工作正常。你只是忘記告訴Ajax更新輸入組件本身。添加inputCpf@this<p:ajax update>

<p:ajax ... update="@this inputNameOwner" /> 

明確的UIInput#setValid(false)調用驗證程序是不必要的。擺脫它。一旦JSF捕獲到您的驗證器拋出的ValidatorException,JSF就已經完成了所有工作。

+0

我覺得很蠢。非常感謝@BalusC。 – xeko

相關問題