Header Ads

Publicaciones recientes

Java EE 8: Bean Validation

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