2013-08-05 1 views
1

내 프로젝트에서 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와 바이올린 요구하고 있지 않다 알고

누구에게 이런 일이 발생했는지에 대한 아이디어가 있습니까?

+1

분명한 것은 피하기 위해 프로젝트와 서버를 올바르게 청소/재구성/재배포/재시작 했습니까? 어노테이션을 이미 사용하고 있다면 faces-config.xml에 등록 할 필요가 없습니다. 관련이없는 노트에서는 2010 년 반이 아닌 라틴 문자가 도메인 이름에 허용되므로 전자 메일 주소도 허용됩니다. 따라서 라틴 문자와 일치하는 정규 표현식 패턴은 심각하게 손상됩니다. – BalusC

+0

@BalusC 고마워요. 예, 청소하고 재배치했습니다. 정규식 패턴은 현재는 간단한 자리 표시 자입니다. 일단 작동 시키면 regexlib.com에서 좀 더 용서할 것입니다. :) – Skytiger

+1

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

답변

1

분명히 대상 서버가 배포/작업 폴더를 적극적으로 캐싱하고 있으며 외부 변경 사항을 즉시 알지 못하는 것 같습니다. 어느 쪽을 사용하고 있습니까? 그것은 "개발"과 "생산"무대 설정의 종류가 있습니까? 개발로 설정하십시오.

+0

제작에 설정되었습니다 - 저는 dev에 설정하고 workign입니다 이제 괜찮아, 고마워. – Skytiger

관련 문제