2016-05-17 141 views
0

我的電子郵件輸入字段有兩個驗證器,第一個使用f:validateRegex,第二個使用f:驗證器。當validateRegex失敗時顯示默認消息('值無效'), 當驗證器失敗時顯示驗證器消息('電子郵件已被使用')。 直到我使用validatorMessage自定義f:validateRegex消息時,它纔算正常。 輸入字段現在顯示新消息('電子郵件無效'),這是意外的。validatorMessage覆蓋其他消息

那麼我該如何保持f:驗證器消息?

HTML:

<p:inputText id="phoneNo" value="#{bean.phoneNo}" 
validatorMessage="#{msg['errors.phone.invalid']}"> 
    <f:validateRegex pattern="#{msg['pattern.regex.phone']}" /> 
    <f:validator binding="#{phoneNoValidator}" /> 
</p:inputText> 
<p:message for="phoneNo" showDetail="true" /> 

Validator類:

public void validate(FacesContext context, UIComponent component, 
    Object value) throws ValidatorException { 
    fc = context; 
    String phoneNo = String.valueOf(value); 
    if (driverBO.isExistMobileNo(phoneNo)) { 
     FacesMessage message = getErrorMessage(Errors.PHONE_DUPLICATED); 
     throw new ValidatorException(message); 
    } 
} 

回答

-1

正如你已經注意到了 「validatorMessage覆蓋等消息」。 f:validateRegex對於消息定製也不太方便。

  1. 刪除屬性:validatorMessage
  2. 刪除標籤:F:validateRegex
  3. 移至Bean驗證其是由在bean添加跟隨着註釋容易定製和對I18N:

的示例代碼:

@Pattern(regexp = "[A-Za-z\\. ]+", message = "{pattern.regex.phoneMessage}") 
private String phoneNo; 

消息需要定義在:ValidationMessages.properties for d默認語言環境和「xx」語言環境的ValidationMessages_xx.properties。

看到一個很好的article約。