Я создал валидатор бина, который применяю к своему методу установки бина. Вместо того, чтобы получить ошибку проверки JSF, я получаю исключение. Есть ли способ заставить это работать, или мне следует использовать традиционный валидатор JSF?
//Bean Method
public void setGuestPrimaryEmail(@ValidEmail String email){
guest.getEmails().get(0).setValue(email);
}
//Validator interface
@Target({ElementType.FIELD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EmailValidator.class)
public @interface ValidEmail {
String message() default "{invalid}";
Class<? extends Payload>[] payload() default {};
Class<?>[] groups() default {};
}
//Validator impl
public class EmailValidator implements ConstraintValidator<ValidEmail, String> {
private Pattern p;
@Override
public void initialize(ValidEmail constraintAnnotation) {
p = java.util.regex.Pattern
.compile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (DothatUtils.isEmpty(value)) {
return true;
}
boolean invalid = !p.matcher(value).matches();
if (invalid)
return false;
return true;
}
}
Исключение:
2013-11-30T20:58:41.747+0000|SEVERE: javax.faces.component.UpdateModelException:
javax.el.ELException: /index.xhtml @144,86 value="....":
javax.validation.ConstraintViolationException: 1 constraint violation(s) occurred during method validation.
Примечание. Я использую GF4 с JSF 2.2.4. Если я помещу свою пользовательскую аннотацию в поле, она будет работать, как и ожидалось.
EmailValidator
)? - person Tiny   schedule 01.12.2013ElementType.METHOD
к аннотации@Target
в дескрипторе ограничения? - person Tiny   schedule 01.12.2013setter
, а не наgetter
. Когда я переместил аннотацию в геттер, все заработало нормально. Вы хотите опубликовать это как ответ? - person Ioannis Deligiannis   schedule 01.12.2013