2012-03-27 3 views
2

0 и им пытаются сделать пользовательскую проверку для email.Following это код моего электронного валидатора:JSF2.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) 

Так пожалуйста, помогите мне, что то, что должно б е решение?

+0

Другая идея - использовать Daniel

ответ

2
  • Удостоверьтесь, что ваш faces-config.xml заявлен как соответствующий JSF 2.x.
  • Убедитесь, что класс действительно находится в упаковке.
  • Убедитесь, что в идентификаторе валидатора нет пробелов (пробелы!).
  • Убедитесь, что вы правильно перестроили/переустановили/перезапустили код/​​WAR/сервер.
  • Если класс фактически встроен в файл JAR
    • Убедитесь, что JAR имеет JSF 2.x совместимый /META-INF/faces-config.xml файл.
    • Убедитесь, что он попал в /WEB-INF/lib WAR.

Unrelated к конкретной проблеме, у Вас есть проблемы threadsafety в вашем валидатора. matcher не должен быть объявлен как переменная экземпляра. Вместо этого объявите его как локальную переменную метода. Другой проблемой, не связанной с JSF, с вашим валидатором является то, что адреса электронной почты: since 2010 разрешено содержать нелатинские символы, такие как арабский, иврит, CJK и т. Д. Update your regex.

Смежные вопросы