Boa noite pessoal do Guj.
Crie um custom bean validator usando o hibernate validator 4.1.0.
Interface:
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Target({FIELD, TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = ConfirmValidator.class)
@Documented
public @interface Confirm {
String message() default "Teste Validação";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String field();
}
A classe:
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public final class ConfirmValidator implements ConstraintValidator<Confirm, Object> {
private String field;
@Override
public void initialize(Confirm constraintAnnotation) {
field = constraintAnnotation.field();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
System.out.println("Teste");
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(message).addNode(field).addConstraintViolation();
return false;
}
}
Classe teste
package BeanControler;
import Validator.constraint.Confirm;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
@Confirm(field="email")
public class teste {
@Size(min=10, message="Min 10")
@Confirm(field="email")
private String email;
private String confirmEmail;
public teste() {
}
public String getConfirmEmail() {
return confirmEmail;
}
public void setConfirmEmail(String confirmEmail) {
this.confirmEmail = confirmEmail;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
login.xhtml
<h:message for="loginInput" rendered="#{!loginBean.render}" />
<h:inputText id="loginInput" value="#{loginBean.teste.email}" required="true" rendered="#{!loginBean.render}"/>
<h:inputSecret id="senhaInput" size="30" maxlength="30" value="#{loginBean.teste.confirmEmail}" required="true" rendered="#{!loginBean.render}"/>
Bom o problema é o seguinte, ele está validando apenas o @Size, e o custom só valida o target FIELD, mas o target TYPE não valida. Não sei o porque, pois peguei exemplos prontos na net e não funciona, apenas os outros.
Gostaria e sabe se alguem já passou por isso e se tem a solução.
Uso o java EE 6, mojarra 2.1.1 e o hibernate validator 4.1.0. Testei usando o glassfish 3.1 e o tomcat 7.0.14. O problema é que não da nenhum erro.
Desde já agradeço!