validatorMessage覆盖其他消息
问题描述:
我的电子邮件输入字段有两个验证器,第一个使用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);
}
}
答
正如你已经注意到了 “validatorMessage覆盖等消息”。 f:validateRegex对于消息定制也不太方便。
- 删除属性:validatorMessage
- 删除标签:F:validateRegex
- 移至Bean验证其是由在bean添加跟随着注释容易定制和对I18N:
的示例代码:
@Pattern(regexp = "[A-Za-z\\. ]+", message = "{pattern.regex.phoneMessage}")
private String phoneNo;
消息需要定义在:ValidationMessages.properties for d默认语言环境和“xx”语言环境的ValidationMessages_xx.properties。
看到一个很好的article约。