我在名为EmailValidator的包“com.travstar.validators”中的项目中创建了一个验证程序。未找到JSF验证程序
内容类:
package com.travstar.validators;
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("emailValidator")
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);
}
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException
{
matcher = pattern.matcher(value.toString());
if (!matcher.matches())
{
FacesMessage msg = new FacesMessage("Email validation failed.", "Invalid Email format.");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
,我实现电子邮件验证这样的:
<h:panelGrid columns="1" width="100%">
<h:outputText value="Email Address"></h:outputText>
<h:inputText id="emailAddress" value="#{passengerDetailsBean.contactDetails.emailAddress}" styleClass="input-block-level" placeholder="" required="true">
<f:validator validatorId="emailValidator"></f:validator>
</h:inputText>
<h:message for="emailAddress" styleClass="alert alert-error" />
</h:panelGrid>
这或多或少是完全一样的教程我在网上找到,但我没有能够得到它的工作。
我打网页的时候,下面的异常被抛出:
javax.servlet.ServletException: Unknown validator id 'emailValidator'
我使用JSF 2.1,所以据我知道我不需要用在faces-config.xml拨弄
任何人有任何想法,为什么发生这种情况?
为了避免显而易见,您是否正确清理/重建/重新部署/重新启动项目和服务器?如果您已经使用了注释,那么在faces-config.xml中注册并不是必需的。在一个不相关的说明中,由于2010年半年的非拉丁字符被允许在域名中,因此也允许电子邮件地址。因此,只匹配拉丁字符的正则表达式模式被严重破坏。 – BalusC
@BalusC谢谢 - 是的,我做了清理和重新部署。 正则表达式模式现在是一个简单的占位符 - 一旦我得到它的工作,我会寻找regexlib.com上一个更宽容的:) – Skytiger
然后我不知道。 'ClassNotFoundException'显然意味着类不在classpath中。假设您没有任何拼写错误,这只能表示该项目未正确构建/部署,或者您只是没有运行您认为正在运行的代码。在服务器的deploy文件夹中进行潜水,并浏览是否在预期位置看到“EmailValidator.class”。例外情况表明它不在那里。 – BalusC