Vaadin Flow
You must have been using the previous generation of Vaadin, versions 6, 7, and 8.
Because of the limitations and incompatibilities of earlier browsers, the long delays in producing CSS 3, and predating HTML5, Vaadin did indeed generate large and complicated pages. Given the relatively poor performance of JavaScript runtimes back then, some elaborate web apps may not have performed as well as you would have liked.
Web Components versus GWT
Fast forward some years now since your Question was posted. Vaadin Flow has arrived. Versions 10 and later are longer based on GWT. Instead they use the open standards that have emerged, collectively known as Web Components.
CSS 3
CSS 3 has finally arrived, and matured. Browsers now offer built-in sophisticated page layout with Flexbox and Grid, in addition to the previous Float. So no longer must page layout be hacked together with abuse of table
and crazy assortment of div
& span
tag soup. Page layout can now be built with short, simple, and clean code.
Modern browsers
Other modern advancements include:
- HTML5 designed expressly for building web apps (as opposed to web documents)
- The consolidation in browser engines (basically only 2 left standing: WebKit/Chromium & Quantum/Gecko)
- Dramatic advances in the performance of JavaScript runtimes, plus important new features of JavaScript 6
- Close cooperation between browser makers in writing and implementing web standards with much more consistent behaviors
- The "evergreen" rapid-release model of modern browsers
All these taken together mean the burden on Vaadin to deliver high-quality consistent web-app experiences has been greatly decreased. You should see much shorter, simpler, and faster page code.
Give it a try.
For more discussion, see my Answer to the Question, Understanding Vaadin Flow / Vaadin 10.
The minuses are:
Big and complex HTML output. That slows down the browser response time (also mentioned here and there) and leads to some rendering peculiarities from browser to browser.
No longer big and complex, as discussed above, because of modern web technology improving so much.
Difficulties in handling big number of components (see Can CustomLayout handle 5000 components?).
Web Components is an open standard, composed of four specifications.
Many components have been built over the last several years, now available for you to use in your Vaadin Flow web apps.
- Most of the UI widgets you knew in Vaadin 6/7/8 have been rebuilt as Web Components (see Comparison Matrix). This means these Vaadin components can be used in other web projects without the Vaadin Flow server-side Java binding.
- You can easily wrap other non-Vaadin-specific components built on Web Components to be available to your in your Java code running on the server-side Vaadin Flow framework. See Integrating a Web Component. To get you started, here are a couple thousand to choose from.
- You can create your own components.
The need to recompile the widget set if you use 3rd party components.
No more WidgetSet in Vaadin Flow, because there are no more GWT widgets. Supplanted by Web Components as discussed above.
What Web Framework fits best the following requirements:
Vaadin Flow ticks all the boxes you listed in your Question: event handlers, common components with advanced features, sophisticated page layout, user-events propagating from client to server (and the other direction via built-in Push technologies), keyboard shortcuts, and a short learning curve for Java programmers.
Furthermore, from the server-side you can now invoke JavaScript snippets on the browser. And Vaadin 15 this spring brings client-side coding in TypeScript while still integrating with the Java code running server-side in Vaadin Flow.
UriFragmentUtility
. I need to know the client coordinates of the component to display the popup next to it. I haven't found any way to do it.ClickableCustomLayout
was very helpful, but it has the same limitation: ~500 components and browser is down. Also how do you suggest to pass information fromURIHandler
(let's say linkID) into Vaadin component (let's say to currentPanel
)? Hacking into event routing? Event listener as thread local? – Gemsbok