Пользовательский валидатор в JSF 2.0
В этой статье мы покажем вам, как создать собственный валидатор в JSF 2.0.
меры
-
Создайте класс валидатора, реализовав интерфейс
javax.faces.validator.Validator. -
Переопределить метод
validate(). -
Назначьте уникальный идентификатор валидатора с помощью аннотации
@FacesValidator. -
Ссылка на пользовательский класс валидатора на компонент JSF через тег
f:validator.
Подробное руководство по созданию настраиваемого имени валидатора «EmailValidator» - для проверки адреса электронной почты с помощью регулярного выражения Java.
1. Структура папок
Структура каталогов этого проекта.

2. Класс валидатора
Создайте собственный класс валидатора и реализуйте интерфейсjavax.faces.validator.Validator.
package com.example;
import javax.faces.validator.Validator;
public class EmailValidator implements Validator{
//...
}
Переопределяет методvalidate().
public class EmailValidator implements Validator{
public void validate(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
//...
}
}
Назначьте уникальный идентификатор валидатора@FacesValidator.
package com.example;
import javax.faces.validator.Validator;
@FacesValidator("com.example.EmailValidator")
public class EmailValidator implements Validator{
//...
}
Смотрите полный пользовательский класс валидатора:
EmailValidator.java
package com.example;
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("com.example.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("E-mail validation failed.",
"Invalid E-mail format.");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
Выше показан пользовательский класс валидатора с идентификаторомcom.example.EmailValidator. Если адрес электронной почты недействителен, возвращает сообщение об ошибкеFacesMessage.
Note
Для получения подробных сведений о шаблоне регулярного выражения электронной почты, пожалуйста, обратитесь к этому «http://www.example.com/regular-expressions/how-to-validate-email-address-with -regular-expression / [Проверить электронную почту с помощью регулярного выражения Java] ».
3. Управляемый Боб
Нормальный управляемый бин с именем «пользователь», здесь ничего особенного.
package com.example;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="user")
@SessionScoped
public class UserBean implements Serializable{
String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
4. Страница JSF
Ссылка выше настраиваемого валидатора на компонент JSF через атрибут «validatorId» в тегеf:validator.
Spring DI в пользовательский валидатор JSF
Если вам нужен@Autowired в пользовательском валидаторе JSF, используетсяbinding вместоvalidatorId. Прочтите этот пост -Spring @Autowired into JSF custom validator.
default.xhtml
Custom validator in JSF 2.0
Enter your email :
result.xhtml
Custom validator in JSF 2.0
Email Address :
5. Demo
Проверяет адрес электронной почты с помощью пользовательского валидатора, если адрес электронной почты недействителен, возвращает сообщение об ошибке.

Скачать исходный код
Скачать -JSF-2-Custom-Validator-Example (10 КБ)