내 프로젝트에서 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'은 클래스가 클래스 패스에 없다는 것을 분명히 의미합니다. 오타를 만들지 않았다면 프로젝트가 제대로 구축/배포되지 않았거나 실행중인 것으로 생각하는 코드를 실행하지 않은 것일 수 있습니다. 서버의 deploy 폴더에서 다이빙하고 예상 된 위치에'EmailValidator.class'가 있는지 찾아보십시오. 예외는 거기에 없다고 제안합니다. – BalusC