Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 更改f:validateRegex的默认消息_Validation_Jsf_Message - Fatal编程技术网

Validation 更改f:validateRegex的默认消息

Validation 更改f:validateRegex的默认消息,validation,jsf,message,Validation,Jsf,Message,我有电子邮件输入: <h:inputText value="#{registrationBean.email}" id="email" label="#{msgs.email}"> <f:validateLength minimum="5" maximum="50" /> <f:validateRegex p



我有电子邮件输入:

<h:inputText value="#{registrationBean.email}" id="email" label="#{msgs.email}">
                        <f:validateLength minimum="5" maximum="50" />
                        <f:validateRegex
                                pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />
                    </h:inputText>
                    <h:message for="email"/>
但我想要“不正确的电子邮件…”之类的东西
谢谢。

您可以使用验证程序:

public class EmailValidator implements Validator {
    private static Pattern patt = Pattern.compile(Constants.getEmailRegExp());
    @Override
    public void validate(FacesContext arg0, UIComponent comp, Object arg2)
            throws ValidatorException {
        if (arg2 == null || arg2.toString().trim().length() == 0) {
            return;
        }
        if (!patt.matcher(arg2.toString().trim()).matches()) {
            String label = (String) comp.getAttributes().get("label");
            throw new ValidatorException(new FacesMessage(
                FacesMessage.SEVERITY_ERROR, (label == null || label.trim().length() == 0 ? "Email: " : label+": ") +
                "Invalid format", null));
        }
    }
}
通过注释或在
faces config.xml
中注册它:

<validator>
    <validator-id>email-validator</validator-id>
    <validator-class>path.EmailValidator</validator-class>
</validator>

电子邮件验证程序
path.EmailValidator
并使用它

<h:inputText id="email" label="#{msg.email}"
    value="#{registrationForm.email}"
    size="40" maxlength="80" required="true">
    <f:converter converterId="lowerCase" />
    <f:validator validatorId="email-validator" />
</h:inputText>


您可以使用inputText的
validatorMessage
属性。在您的情况下,您可以使用:

<h:inputText value="#{registrationBean.email}" id="email" label="#{msgs.email}" validatorMessage="Incorrect e-mail…">
    <f:validateLength minimum="5" maximum="50" />
    <f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />
</h:inputText>
<h:message for="email"/>


不管问题是什么,自2010年以来,互联网域名(以及电子邮件地址)中都有非拉丁字符。换句话说,您的正则表达式已经过时。请参阅问题的答案。它是关于电子邮件验证的。
validator消息
将在任何验证程序失败时显示。该消息只应出现在
f:validateRegex
中。我这里有相同的,它是为两个验证器显示的。
<h:inputText value="#{registrationBean.email}" id="email" label="#{msgs.email}" validatorMessage="Incorrect e-mail…">
    <f:validateLength minimum="5" maximum="50" />
    <f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />
</h:inputText>
<h:message for="email"/>