Version 8.0.0 built on 2017-02-18.
Release Notes for Vaadin Framework 8.0.0
- Overview of Vaadin Framework 8.0.0 release
- Change Log for Vaadin Framework 8.0.0
- Enhancements in Vaadin Framework 8.0
- Incompatible or Behavior-altering Changes in 8.0
- Known Issues and Limitations
- Getting started with Vaadin Framework
- Package Contents
- Migrating from Vaadin 7.7
- Vaadin Framework 8.0.0 dependencies
- Supported Technologies
- Vaadin Framework on the Web
Overview of Vaadin Framework 8.0.0 Release
Special note for add-on developers: please test your add-on against Framework 8.0 and update your add-on as needed.
Change Log for Vaadin Framework 8.0.0
You can find the full list of all changes in GitHub.
Enhancements in Vaadin Framework 8.0
Vaadin Framework 8.0 includes many major and minor enhancements. Below is a list of the most notable changes:
- New, simpler data binding API
- Vaadin Framework is now based on Java 8
- Vaadin Framework is using GWT 2.8, allowing client side code to use Java 8
- Other Framework dependencies including Atmosphere have been upgraded
- Context click events are now generated on iOS devices (#7387)
The new data binding API replaces the old Container, Item, Property, FieldGroup, Validator, Converter and related classes with new mechanisms. Also components using those are replaced with updated implementations using the new API, and the old data binding API and components have been moved to separate compatibility packages for ease of migration. For more details, see the list of incompatible changes and how to migrate to Vaadin Framework 8.
For enhancements introduced in Vaadin Framework 7.7, see the Release Notes for Vaadin Framework 7.7.0.
Incompatible or Behavior-altering Changes in 8.0
- Vaadin Framework now requires Java 8 or later and Servlet 3.0 or later
- Support for older browsers (including Microsoft IE 8-10) and Windows Phone has been dropped
- Support for Google App Engine has been dropped
- Supported servers
Compatibility and requirements
- Components using Property, Item or Container API have been reimplemented for the new API, except Tree, Table, TreeTable and Calendar
- Framework 7 versions of the components available in the v7 compatibility package for easier migration, see list of legacy components
- Binder is the replacement of FieldGroup and BeanFieldGroup
- Converters and Validators have been moved from Components to Binder
- DataProvider is the replacement of Container
- ListDataProvider is the default in-memory data provider replacing IndexedContainer, BeanItemContainer, and BeanContainer
- BackEndDataProvider is the basis for a lazy data provider
- SQLContainer is deprecated in v7 compatibility package and not directly replaced
- HierarchicalContainer is deprecated in v7 compatibility package and a replacement is planned for 8.1
- All components that list data are based on AbstractListing
- All AbstractListing components have been typed with the type of items they are listing
- HasValue replaces the Field interface as the basis for all field components
- Field components based on HasValue may or may not accept null values, depending on each component. There is no setNullRepresentation anymore
- AbstractField::setRequired(boolean) has been replaced with:
- HasValue::setRequiredIndicatorVisible(boolean) which only makes the * required indicator visible for the component
- BindingBuilder::setRequired(String) adds a "not-empty" validator when used in Binder and makes the * required indicator visible
- setItemCaptionGenerator in AbstractListing replaces setItemCaption, setItemCaptionMode and setItemCaptionPropertyId from AbstractSelect
- setItemIconGenerator in AbstractListing replaces setItemIcon and setItemIconPropertyId from AbstractSelect
New Data Binding API related changes
- All listeners and most single method interfaces have been marked as @FunctionalInterface
- All components are now immediate, and AbstractComponent::setImmediate(boolean immediate) has been removed.
- Read-only is now a feature for field components and has been moved from AbstractComponent to HasValue
- Some deprecated/obsolete parts of API have been removed
- All addListener/removeListener methods have been removed - replaced with the Java 8 friendly addClickListener(), addValueChangeListener() etc. instead
- All new listeners are unregistered using a Registration object returned by addXyzListener() rather than with a separate removeXyzListener()
- Input prompts have been replaced with placeholders utilizing the related browser functionality, API is now setPlaceHolder instead of setInputPrompt
- Valo is the default theme, instead of Reindeer
- Valo is the only included theme, all other themes have been moved to the compatiblity-themes package and are available as a separate dependency
- SharedState and the getter methods for it have been added to each component, regardless of whether those are used for anything or not
- The old liferay theme (Liferay 6.0 look) has been removed
- FontAwesome icon constants have been deprecated, and will not be updated. It is replaced with Vaadin Icons that are included in the Framework
- It is no longer possible to configure a CurrentInstance to be automatically inherited into spawned threads.
General API changes
- setDescription(String) now renders tooltip as inner text by default, instead of HTML. HTML can be still used by using setDescription(String, ContentMode)
- com.vaadin.shared.ui.label.ContentMode has been moved into com.vaadin.shared.ui
- DateField replaces old PopupDateField
- DateField and InlineDateField are now based on Java 8 LocalDate instead of Date
- DateTimeField and InlineDateTimeField based on Java 8 LocalDateTime are introduced for time selecting time (hour / minute / second)
- DateField and InlineDateField don't support time anymore, meaning the highest resolution for those is DateResolution.DAY
- Resolution for DateField and InlineDateField is replaced by DateResolution and DateTimeResolution
- OptionGroup has been removed and replaced by:
- CheckBoxGroup replaces OptionGroup in multiselect mode
- RadioButtonGroup replaces OptionGroup in single select mode
- TwinColSelect is always in multiselect mode
- ListSelect is always in multiselect mode
- Upload has a separate immediate mode setImmediateMode(boolean) replacing setImmediate and is now by default in immediate mode
- RichTextArea no longer receives a special "v-richtextarea-readonly" class when readonly, only the standard "v-readonly" class
- Grid has been typed to the bean type it is using and its columns are specified with a value provider callback instead of "propertyId"
- Grid Editor now uses Binder instead of FieldGroup, and doesn't support a FieldFactory
- Grid selection API has been removed from component level to GridSelectionModel which is available via Grid::getSelectionModel()
- Grid::setSelectionModel(GridSelectionModel) visibility has been changed from public to protected to reduce confusion with Grid::setSelectionMode
Component specific API changes
- OptionGroup::setItemEnabled(Object, boolean) has been replaced by setItemEnabledProvider that accepts a predicate
- VTextualDate widget class is removed and replaced by abstract VAbstractTextualDate class which is supposed to be inherited by concrete date field implementation widgets
Client side widget specific API changes
- The default width of Label is now undefined, matching other components
- The default width for ComboBox pop-up is now 100 % (previously undefined)
- VerticalLayout has by default spacing = true and margin = true
- HorizontalLayout has by default spacing = true and margin = false
Component specific visual changes
- Components in the compatibility packages now use the prefix vaadin7-" in declarative design files
- required-indicator-visible attribute replaces the required attribute
- placeholder attribute replaces the input-prompt attribute for input components
- multi-select attribute is no longer used for select components
- vaadin-option-group with attribute multi-select=true is replaced by v-check-box-group
- vaadin-option-group with attribute multi-select=false is replaced by v-radio-button-group
- immediate attribute is not used for any component
- read-only attribute is now only used for field components instead of all components
- vaadin-upload has a new attribute immediate-mode that replaces the removed immediate attribue
- vaadin-grid column elements don't have property-id attribute anymore. Columns aren't addressed by a property anymore but they have an id. So there is column-id attribute instead
- vaadin-grid doesn't have readonly attribute anymore. It is replaced by selection-allowed attribute which has special meaning for a Grid
Component specific declarative syntax changes
- Calendar - no replacement in 8
- DateField - replaced in 8 by DateField and DateTimeField
- Form - no replacement in 8
- Grid (and renderers)
- InlineDateField - replaced in 8 by InlineDateField and InlineDateTimeField
- Label - replacement in 8 doesn't support data binding
- OptionGroup - replaced by CheckBoxGroup (multiselection) and RadioButtonGroup (single selection)
- PopupDateField - replaced in 8 by DateField and DateTimeField
- Select - removed, use ComboBox for single selection and ListSelect for multiselection
- Table - no replacement in 8.0, use Grid.
- Tree - no replacement in 8.0, planned for 8.1
- TreeTable - no replacement in 8.0, TreeGrid planned for 8.1
Legacy components in the v7 compatiblity package com.vaadin.v7.ui available as a separate dependency
Known Issues and Limitations
- Drag'n'drop in a Table doesn't work on touch devices running Internet Explorer (Windows Phone, Surface) (#5170)
- Specifying layout sizes using em is currently discouraged, because it results in fractional components sizes in many cases, which might cause unwanted 1px gaps between components.
- Up-to-date information about configuration needed for push and compatibility issues are available in
this wiki page.
The most prominent limitations are:
- Grid does not support adding components to cells. Instead light-weight Renderers can be used to present and edit data.
- The Maven GWT compilation for Vaadin7WidgetSet requires at least 1G of memory, when using the vaadin-client-compability package. If compiled inside Eclipse, possibly even more.
Getting started with Vaadin Framework
Vaadin Framework is a Java framework for building modern web applications that look great, perform well and make you and your users happy. The Framework is available under the Apache License, Version 2.0 (see the license.html in the Vaadin Framework ZIP package).
The easiest ways to start using Vaadin Framework are:
- Maven dependency.If using Maven, define it as a dependency or use any of the available archetypes to create a new project. More information at https://vaadin.com/maven
- IDE Plugins.If using Eclipse, use the Vaadin Plugin for Eclipse, which automatically downloads the Framework libraries. For NetBeans 8.0 and 7.4, use the official Vaadin plugin that provides Maven based wizards and code completion support for Vaadin Framework based development.
Vaadin Framework is also available as a ZIP package downloadable from Vaadin Download page.
Inside the ZIP installation package you will find:
- Separate server-side (vaadin-server) and client-side (vaadin-client, vaadin-client-compiler) development libraries
- Precompiled widget set (vaadin-client-compiled) for server-side development
- Shared library (vaadin-shared) for both server- and client-side libraries
- Valo theme (the only inbuilt theme) (vaadin-themes)
- Dependency libraries provided under the lib/ folder
- Vaadin 7 compatible classes for server-side (vaadin-compatibility-server, vaadin-compatibility-shared), client-side (vaadin-compatibility-client) and themes (vaadin-compatibility-themes)
See the README.TXT in the installation package for detailed information about the package contents.
For server-side development, copy the vaadin-server , vaadin-client-compiled , vaadin-shared , and vaadin-themes from the main folder and the dependencies from the lib folder to the WEB-INF/lib folder of your Vaadin project. (The vaadin-client-compiled is necessary if you do not wish to compile the widget set by your own, which you need to do if you use almost any add-on components.)
Migrating to Vaadin Framework 8.0
Vaadin Framework 7 applications need some changes when migrating to Vaadin Framework 8. In addition to updating dependencies, all references to Framework 7 style data binding and components using it need to be updated either to use new Framework 8 style data binding or to use the compatibility versions in separate packages.
Vaadin Framework 7 compatible versions of the old data binding API and components (with the exception of Form) are available in the package com.vaadin.v7 in modules vaadin-compatibility-server, vaadin-compatibility-shared etc. that can be used instead of vaadin-server, vaadin-shared etc. The package vaadin-compatibility-client-compiled contains the widgetset com.vaadin.v7.Vaadin7WidgetSet which can be used instead of DefaultWidgetSet. Note that the widgetset compilation for Vaadin7WidgetSet compilation requires at least 1G of memory. To ensure this, add <extraJvmArgs>-Xmx1G</extraJvmArgs> to the vaadin-maven-plugin configuration in your pom.xml file.
All applications using either Reindeer, Runo, Chameleon or Base theme must include the vaadin-compability-themes package.
Some Vaadin Framework 7 add-ons do not work in version 8 - please check the add-ons in Vaadin Directory for Framework version 8 support.
The Migration Tool
To ease the migration, the vaadin maven plugin has a target vaadin:upgrade8, which updates all necessary com.vaadin.* imports in java files and prefixes design files in your project to point to the legacy 7 versions, e.g. com.vaadin.ui.TextField to com.vaadin.v7.TextField. This step can be also run manually by building and running the migration tool locally. Note that you still need to add the legacy package dependencies to your pom.xml.
Common Upgrade Steps For All Versions
Always when upgrading from an earlier Vaadin Framework version, you must:
- Recompile your classes using the new Framework version. Binary compatibility is only guaranteed for maintenance releases of Framework.
- Unless using the precompiled widget set, recompile your widget set using the new Framework version.
Remember also to refresh the project in your IDE to ensure that the new version of everything is in use.
By using the " ?debug " URL parameter, you can verify that the version of the servlet, the theme, and the widget set all match.
Eclipse users should always check if there is a new version of the Eclipse Plug-in available.
Maven users should update the Vaadin Framework dependency version in the pom.xml .
Vaadin Framework 8.0.0 Dependencies
When using Maven, Ivy, Gradle, or other dependency management system, all Framework dependencies are downloaded automatically. This is also the case when using the Vaadin Plugin for Eclipse.
The Vaadin Framework ZIP installation package includes the dependencies in the lib subfolder. These need to be copied to the WEB-INF/lib folder of the web application that uses Vaadin Framework.
The dependencies are listed in the Licensing description. Some are explicit dependencies packaged and distributed as separate JARs, while some are included inside other libraries.
If you use the bean validation feature, you need a Bean Validation API implementation. You need to install the implementation JAR in the WEB-INF/lib directory of the web application that uses validation.
Vaadin Framework 8 is compatible with Java 8 and newer. Vaadin Framework 8 is especially supported on the following operating systems:
- Mac OS X
Vaadin Framework 8 requires Java Servlet API 3.0 but also supports later versions and should work with any Java application server that conforms to the standard. The following application servers are supported:
- Apache Tomcat 7-8
- Apache TomEE 1.7 and 7.0
- Oracle WebLogic Server 12.2
- IBM WebSphere Application Server 9
- JBoss EAP 6
- Wildfly 8-10
- Jetty 8-9
- Glassfish 4
- Payara Server 164
Vaadin Framework 8 supports the JSR-286 Portlet specification and all portals that implement the specification should work provided they support Java 8 and Servlet 3.0. The following portals are supported:
- Liferay Portal 6.2
Vaadin Framework 8.0.0 supports the following desktop browsers:
- Mozilla Firefox (latest version, currently 48)
- Mozilla Firefox ESR (latest version, currently 45 ESR)
- Internet Explorer 11, Edge (latest version)
- Safari 9+
- Google Chrome (latest version, currently 52)
Additionally, Vaadin Framework supports the built-in browsers in the following mobile operating systems:
- iOS 9+
- Android 4+ with Chrome 42+
Vaadin on the Web
- vaadin.com - The developer portal containing everything you need to know about Vaadin
- vaadin.com/demo - A collection of demos for Vaadin Framework
- vaadin.com/learn - Getting started with Vaadin Framework
- vaadin.com/forum - Forums for Vaadin Framework related discussions
- vaadin.com/docs - Documentation for Vaadin Framework
- vaadin.com/api - Online javadocs
- vaadin.com/directory - Add-ons for Vaadin Framework
- vaadin.com/pro-tools - Commercial tools for Vaadin Framework
- vaadin.com/support - Commercial support for Vaadin Framework
- vaadin.com/services - Expert services for Vaadin Framework users
- vaadin.com/company - Information about the company behind Vaadin Framework
- vaadin.com/contribute - Contribution quide
- github.com/vaadin/framework - Github repository