Routing
Pre-release
Pre-release
New features
Routerhandles navigation between different views in the application without reloading the page. The path of the browser's location is updated using the HTML5 History API – the URI fragment (#) is not used for navigation.<a>elements with arouterLinktriggers internal navigation instead of making the browser reload the page with the new URL.RouterConfiguratoris used to update theRouterConfigurationused by the application'sRouter. The configurator class to use for the application is defined with therouterConfiguratorparameter in the@VaadinServletConfigurationannotation or throughweb.xml.RouterConfiguration.setRoute(String, Class<? extends View>)is used to configure a route (i.e. a path) for a view class.View.onLocationChange(LocationChangeEvent)is invoked for the used view when it's shown to the user for a specific URL.- A route can contain placeholders, e.g.
"product/{id}". The actual URL value used for the placeholder is accessible fromLocationChangeEvent, e.g.event.getPathParameter("id"). - A route can end with a wildcard, e.g.
"blog/*". The actual URL value used for the wildcard is accessible usingLocationChangeEvent.getPathWildcard(). - A view can be configured to be shown inside a "parent view" that implements
HasChildView, using eitherRouterConfiguration.setParentView(Class, Class)or as a third parameter toRouterConfiguration.setRoute.- This allows defining a common layout containing e.g. a header or a menu that is used for the actual views in the application.
VaadinServletuses only one URL and reserves /VAADIN/ for internal use. Everything else can be used for views of the actual site.- The page has a
<base href>so that relative URLs work even after navigating to some other location within the site. @Titlecan be used on a View class to make<title>update automatically when the view is shown.- For more control, the view can override
View.getTitle(LocationChangeEvent)or the router can configured to use a customPageTitleGenerator.
- For more control, the view can override
- It is no longer mandatory to have your own UI class.
- Add
context://as a special Vaadin protocol that is always relative to the context path where the app is deployed. - Documentation has been restructured as task-focused tutorials instead a wall of description text.
Elementusability improved- Added
Element.indexOfChild(Element). - Added
Element.getChildren(). - Various getters changed to return
java.util.stream.Stream. - Helper in
ClassListto toggle a class name ElementFactorywith static helpers for common elements
- Added
Fixes
- Inserting an element into a different position in its own parent now works.
- Replacing an element with itself is a no-op.
- Attempting to create loops in the element tree (i.e. adding a parent to its child) immediately throws instead of causing client-side exceptions
ClassListproperly handles empty class names.Page.addJavaScriptandPage.addStyleSheetignores duplicates.- Directories are not served as static resources
- Text nodes can actually be removed from the DOM
New tutorials
- Application structure
- Element API
- Routing and Views
- Misc