Ошибка пользовательской проверки электронной почты JSF2.0 Именованный объект не найден - PullRequest
2 голосов
/ 27 марта 2012

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)

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

1 Ответ

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

Не имеет отношения к конкретной проблеме, в вашем валидаторе есть проблема с безопасностью потоков.matcher не должен быть объявлен как переменная экземпляра.Вместо этого объявите его как локальную переменную метода.Еще одна, не связанная с JSF, проблема с вашим валидатором состоит в том, что с 2010 года адреса электронной почты могут содержать нелатинские символы, такие как арабский, иврит, CJK и т. Д. Обновите регулярное выражение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...