当电子邮件地址无效时,显示的消息是“电子邮件无效。电子邮件无效。”。我知道该消息有两部分:摘要和详细信息。我需要这两个,但我希望每个都有不同的信息。如何更改消息以显示“无效的电子邮件:请输入有效的电子邮件地址”?
<p:messages showDetail="true" autoUpdate="true" closable="true" />
<h:panelGrid columns="2">
<h:outputText value="#{label.email}: *" />
<p:inputText required="true" value="#{userWizard.emailAddress}"
validatorMessage="#{label.invalidEmail}" label="#{label.email}">
<f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$">
</f:validateRegex>
</p:inputText>
</h:panelGrid>
最佳答案
这对于 validatorMessage
(既不是 converterMessage
也不是 requiredMessage
)是不可能的。该值将用作摘要和详细信息。
您需要自己开发一个自定义 validator ,您可以在其中自己构建 FacesMessage
与这两个部分。假设您在 label.email
旁边还有一个表示消息详细信息的 label.email_detail
,那么它应该如下所示:
@FacesValidator("emailValidator")
public class EmailValidator implements Validator {
private static final Pattern PATTERN = Pattern.compile("([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)");
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value == null || ((String) value).isEmpty()) {
return; // Let required="true" handle.
}
if (!PATTERN.matcher((String) value).matches()) {
String summary = context.getApplication().evaluateExpressionGet(context, "#{label.email}", String.class);
String detail = context.getApplication().evaluateExpressionGet(context, "#{label.email_detail}", String.class);
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail));
}
}
}
(请注意,我修改了电子邮件正则表达式,以便更好地为世界统治做好准备;自新的 IANA decision in 2010 以来,域名中允许使用非拉丁字符,如中文、希伯来文、西里尔文等,因此也允许使用电子邮件地址)
然后将其用作
<p:inputText ... validator="emailValidator" />
关于java - <p :messages> summary and detail 中的重复文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13467881/