Todo lo que debes saber sobre Vaadin 8 y sus características

Desde hace unas semanas tenemos disponible una nueva versión de Vaadin, el framework Java de desarrollo de aplicaciones web. En el post de hoy hemos decidido hacer una lista de los principales cambios que presenta Vaadin 8 respecto a la versión anterior. ¡Te lo contamos! 

Vaadin es un framework de Java que se usa para el desarrollo de aplicaciones web, permitiendo que tengan una apariencia agradable y moderna. Cada vez más desarrolladores lo usan dadas las ventajas que aporta. Es por ello por lo que hoy hemos decidido echar un vistazo más de cerca a las ventajas que ofrece su nueva versión en relación a la anterior.

En dicha nueva versión, la 8, se añaden muchas mejoras de rendimiento (¡en algunos casos con un orden de magnitud de hasta 10 veces más eficiente!), así como una gran cantidad de mejoras para facilitar la labor del desarrollador en tareas muy comunes. ¡Ahora es aún más sencillo hacer las cosas!

Uno de los cambios estructurales más grandes es el uso de Java 8, que abre las puertas al uso de las funcionalidades inherentes de esta versión del lenguaje: expresiones lambda, streams, etc.

Las nuevas funcionalidades de Vaadin 8

Repasamos las interesantes novedades que incluye la última actualización de Vaadin.

1.- Permite pasar listas de objetos directamente a los componentes de tipo Grid y Select

Antes, para cargar datos dentro de un componente de tipo Grid, ComboBox, etc. era necesario recurrir a alguna implementación de la interfaz Container. Ahora, con Vaadin 8, podemos pasarle directamente una lista de objetos a estos componentes:

List<Person> people = Backend.getPersons();
Grid<Person> grid = new Grid<>(Person.class);
grid.setItems(people);

2.- Crear captions para los elementos de un Select

Una labor muy común es querer mostrar en nuestros componentes de tipo Select un valor visual diferente al valor interno del objeto contenido. O incluso mostrar un valor visual compuesto por dos atributos de un bean. Para eso, en Vaadin 8 han introducido el ItemCaptionGenerator:

List<Person> people = Backend.getPersons();
ComboBox<Person> comboBox = new ComboBox<>();

comboBox.setItemCaptionGenerator(
    p -> p.getFirstName() + " " + p.getLastName() + "("+ p.getAge() +")"
);
comboBox.setItems(people);

3.- Definición de columnas de Grid

Se ha mejorado y simplificado la definición de las columnas de los componentes de tipo Grid. Ahora es mucho más simple, typesafe y legible:

Grid<Person> grid = new Grid<>();

grid.setItems(persons);

grid.addColumn(Person::getFirstName).setCaption("First Name");
grid.addColumn(Person::getLastName).setCaption("Last Name");

4.- Lazy loading

En versiones anteriores, para conseguir cargar datos de manera eficiente sin sobrecargar el servidor, era obligatorio implementar una compleja interfaz de tipo Container. Ahora, implementar una carga progresiva de datos es mucho más simple:

Grid<Person> grid = new Grid<>();

grid.setDataProvider(
    (sortorder, offset, limit) -> service.findAll(offset, limit),
    () -> service.count()
);

5.- Converters con expresiones lambda

Utilizando expresiones lambda podemos definir converters directamente, de una manera legible y concisa:

new Binder<Person>().forField(textField)
    .withConverter(
        textToInteger -> Integer.parseInt(textToInteger),
        integerToText -> integerToText.toString()
    )
    .bind("age");

6.-Añadir componentes y expandirlos de manera automática

Algo a lo que estamos muy acostumbrados los que venimos usando Vaadin desde versiones anteriores a la 8 es a expandir componentes después de haberlos insertado en el layout correspondiente. ¡Ahora, por fin, podremos hacerlo en un solo paso!

HorizontalLayout header = new HorizontalLayout(title, logout);
VerticalLayout root = new VerticalLayout(header);
Grid<Person> grid = new Grid<>();

root.addComponentsAndExpand(grid);

7- Márgenes y espaciado activado por defecto en los layout

Otra cosa que había que realizar a mano en todos (o casi todos) los layout, era activarles los márgenes y el espaciado. Ahora estos valores vienen activos por defecto en los layout más utilizados (VerticalLayout y HorizontalLayout), ahorrándonos código y tiempo y, de paso, ayudando a tener algo estéticamente agradable sin calentarse mucho la cabeza.

8.- Paquete de compatibilidad con versiones anteriores

Para usar Vaadin 8 en una aplicación ya existente con una versión anterior, se ha provisto de un paquete de migración a través de una tarea de Maven, con lo que actualizar es algo tan simple como ejecutar lo siguiente en el raiz del proyecto:

mvn vaadin:upgrade8

Hasta aquí hemos repasado las principales características de Vaadin 8, esperamos que te haya sido útil.
Volvemos la semana que viene.