gpt4 book ai didi

jsf-2 - JSF2.0 电子邮件自定义验证错误未找到命名对象

转载 作者:行者123 更新时间:2023-12-04 05:52:41 25 4
gpt4 key购买 nike

0,我正在尝试对电子邮件进行自定义验证。以下是我的电子邮件验证器代码:

package customValidator;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("checkemail")
public class EmailValidator implements Validator{

private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\." +
"[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*" +
"(\\.[A-Za-z]{2,})$";

private Pattern pattern;
private Matcher matcher;

public EmailValidator(){
pattern = Pattern.compile(EMAIL_PATTERN);
}



public void validate(FacesContext context, UIComponent component,Object value) throws ValidatorException {

matcher = pattern.matcher(value.toString());
if(!matcher.matches()){

FacesMessage msg =
new FacesMessage("E-mail validation failed.","Invalid E-mail format.");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);

}

}

}

以下是我的 Login.xhtml 文件编码:
Enter your email :

<h:inputText id="email" value="#{user.email}"
size="20" required="true" label="Email Address">
<f:validator validatorId="checkemail" />
</h:inputText>

现在我收到以下错误:
javax.servlet.ServletException: Expression Error: Named Object: checkemail not found.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)

所以请帮助我应该是什么解决方案?

最佳答案

  • 确保您的 faces-config.xml声明符合 JSF 2.x。
  • 确保该类确实在一个包中。
  • 确保验证器 ID 中没有拼写错误(空格!)。
  • 确保您已正确重建/重新部署/重新启动代码/WAR/服务器。
  • 如果该类实际上嵌入在 JAR 文件中
  • 确保 JAR 与 JSF 2.x 兼容 /META-INF/faces-config.xml文件。
  • 确保它以 /WEB-INF/lib 结尾的 war 。


  • 无关 对于具体问题,您的验证器中存在线程安全问题。 matcher不得声明为实例变量。改为将其声明为方法局部变量。验证器的另一个与 JSF 无关的问题是电子邮件地址是 since 2010允许包含非拉丁字符,例如阿拉伯语、希伯来语、CJK 等。 Update your regex .

    关于jsf-2 - JSF2.0 电子邮件自定义验证错误未找到命名对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9890291/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com