2016-05-17 129 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约。