7

当电子邮件地址无效时,显示的消息是“无效的电子邮件。无效的电子邮件。”。我知道消息有两部分:摘要和详细信息。我需要这两个,但我希望每个都有不同的信息。如何更改消息以显示“无效的电子邮件:请输入有效的电子邮件地址”?

<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>  
4

2 回答 2

11

这是不可能的validatorMessage(既不是converterMessage也不是requiredMessage)。该值将用作摘要和详细信息

您需要自己开发一个自定义验证器,而不是在其中您可以自己FacesMessage构建这两个部分。假设您旁边还有代表消息详细信息的 a,那么它应该如下所示:label.emaillabel.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));
        }
    }

}

(请注意,我调整了电子邮件正则表达式,以便更好地为统治世界做好准备;自2010 年新的 IANA 决定以来,即允许在域名和电子邮件地址中使用中文、希伯来语、西里尔文等非拉丁字符)

然后将其用作

<p:inputText ... validator="emailValidator" />
于 2012-11-20T11:55:16.550 回答
5

根据这里的文档:http: //www.primefaces.org/docs/vdl/3.4/primefaces-p/messages.html

你可以做这样的事情:

<p:messages showSummary="true" showDetails="true" />

您也可以将它们分开...用于样式:

<p:messages showSummary="false" showDetails="true" />
<p:messages showSummary="true" showDetails="false" />

但是您不能使用 validatorMessage 定义两条错误消息:

http://www.primefaces.org/docs/vdl/3.4/primefaces-p/inputText.html

于 2012-11-20T06:50:19.247 回答