En Java EE 8, el api Bean Validation ha venido con mejoras.
Por ejemplo, ahora podemos validar un campo de tipo java.time.LocalDate
@Past
private LocalDate fechaIngreso;
También, determinar los límites de una lista:
@NotEmpty
private List<@Size(min = 1, max = 15) String> proyectos;
Al igual que un nuevo tipo de validación (y así evitar log RegEx)
@Email
private String email;
Podemos evaluar los campos validados desde el mismo Java (aquí un ejemplo desde una prueba unitaria):
@Test
public void testMemberWithNoValues() {
Empleado e = new Empleado();
e.setEmail("abc@");
e.setDni("12345678");
e.setProyectos(Arrays.asList("Proyecto 1", "Proy2", "Proy3"));
// validate the input
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Empleado>> vs = validator.validate(e);
vs.forEach((v) -> {
System.out.println("--->" + v.getPropertyPath() + ":" + v.getMessage());
});
}
Ahora bien, este mismo Bean con validación puede ser usado dentro de un JSF:
<h:body>
<h:form>
<h:outputLabel for="nombre" value="Nombre"/>
<h:inputText id="nombre" value="#{formBean.empleado.nombre}" /><br/>
<h:outputLabel for="email" value="Email"/>
<h:inputText id="email" value="#{formBean.empleado.email}" /><br/>
<h:outputLabel for="dni" value="DNI"/>
<h:inputText id="dni" value="#{formBean.empleado.dni}" /><br/>
<br/>
<h:commandButton value="Enviar" />
</h:form>
</h:body>
Código fuente
Puedes ver este ejemplo en acción con este código fuente completo:
https://bitbucket.org/apuntesdejava/novedades-javaee-8/src/master/bean-validation/?at=master
