Spring Boot, Polymer, Vaadin Element y Vaadin FrameWork

Buenas a tod@s,

He creado un proyecto que integra varias tecnologías para el desarrollo de una Web App.

https://github.com/lamendaviesa/vaadin-polymer

La web se construye con Spring Boot. (Para ello, Run as JavaApplication sobre Main.class)
Existen varios templates dentro del proyecto para comprobar el correcto funcionamiento de la app, ver RootController.class:

El objetivo de este proyecto piloto es comprobar si las tres tecnologías funcionan conjuntamente.

El problema con el que me topo es que al ir a http://localhost:8080 y seleccionar la opción: “Lazy Draw” o “Lazy Person” al estar contenido en un iframe, las tablas contruidas con vaadin.com.ui.Grid class, se visualizan. El problema es cuando se refresca la página. La sensación es que lo intercepta @SpringUI de las clase LazyDrawGridUI y no el @RequestMapping de la clase RootController método index().



¿Cómo se puede arreglar esto? Tal vez, esté haciendo una mala gestión de Spring con Vaadin Framework, en tal caso, ¿cúal es correcto modo?

Por último, se quiere filtrar todas las columnas en la tabla “lazy Person”, a la vez que se pagina. La documentación no me resulta muy clara,
¿Cómo debería construir los filtros y usarlos en DataProvier.fromFilteringCallbacks(*)?

Hola,

Gracias por compartir tu código. Se me hizo bastante interesante! Igualmente, excelente forma de preguntar (incluyendo código y explicaciones claras de lo que se requiere y lo que se obtiene).

El primer problema lo puedes resolver configurando un “path” diferente para la UI (Vaadin) y el “view name” (Polymer). Por ejemplo:

@SpringUI(path = "/lazydraw-ui")
public class LazyDrawGridUI ...
[/code][code]
<iframe view="lazydraw" src="http://localhost:8080/lazydraw-ui" ...

El segundo problema lo puedes resolver implementando usando el método
DataProvider.fromFilteringCallbacks()
. Por ejemplo:

DataProvider<Person, PersonFilter> dataProvider = DataProvider.fromFilteringCallbacks(
    query -> service.find(
        query.getOffset(),
        query.getLimit(),
            filterName.getValue().trim().isEmpty() ? null : filterName.getValue().trim(),
            filterAge.getValue().trim().isEmpty() ? null : Integer.valueOf(filterAge.getValue().trim())
    ).stream(),
    query -> service.count(
            filterName.getValue().trim().isEmpty() ? null : filterName.getValue().trim(),
            filterAge.getValue().trim().isEmpty() ? null : Integer.valueOf(filterAge.getValue().trim())
    )
);

grid.setDataProvider(dataProvider);
  • No estoy verificando
    NumberFormatException
    en este ejemplo.

Hice un
pull request
con los cambios en tu repositorio de GitHub.

Gracias Alejandro, si existe en algún sitio posibilidad de darte una buena puntuación, soy toda oídos.