Vaadin
Release Notes
Version 2.7.101
This patch version updates the Vaadin version to the latest Vaadin 24 version, which has a prolonged maintenance support. As this update contains API changes despite being in a patch release, the version number is set to 101.
Version Updates
The following versions have been updated:
| Dependency | New version | Previous version |
|---|---|---|
24.9.11 (Release Notes) |
24.5.14 |
|
Spring Boot |
3.5.10 (Release Notes) |
3.4.12 |
Logback |
1.5.28 |
1.5.21 |
The update to Vaadin 24.9.11 brings some notable changes:
-
HTML Sanitization
The new Vaadin version updates the Jsoup version to 1.20.1 in which the HTML sanitization logic was modified. Some cases are now sanitized differently, for example:-
Input:
<b><iframe>Test</iframe></b>-
Previous behavior: sanitized to
<b>Test</b> -
New behavior: sanitized to
<b></b>
-
-
Input:
<b><i onload="alert('text');" />Test</b>-
Previous behavior: sanitized to
<b><i></i>Test</b> -
New behavior: sanitized to
<b><i>Test</i></b>
-
-
Banned tags (such as
<iframe>) now have their entire content removed, rather than only stripping the tags.
-
-
Frontend Validation for Date Time Picker
The frontend validation for Date-Time Picker (@UIDateTimeField) have changed. We could not detect any negative impact for linkki applications. If you experience any unexpected behaviors, please do not hesitate to contact us. -
Manual value updates in Custom Field
CustomField now has a manual update mode. If enabled, it will no longer automatically update its values when any of its contained fields change. Instead,updateValue()must be called manually, which can reduce unnecessary intermediate updates. -
Upload and download Handling
A new API for file upload and download has been introduced. Users with custom components for upload or download may need to migrate to the new API. See the Vaadin documentation for details. -
Static asset management with @NpmPackage
@NpmPackageis used to declare static assets from npm packages. During build time, these asset files are copied into the frontend and notheme.jsonentries are needed. -
Improved tool tip discoverability with styling hooks
Elements with tooltips now expose a `has-tooltip' attribute. This attribute can be used to add visual indicators in CSS for when the tooltip is available. -
Anchor#setHref(AbstractStreamResource) has been deprecated.
Therefore, LinkkiAnchor#setHref(AbstractStreamResource) has been deprecated as well and is marked for removal. For setting download handlers, LinkkiAnchor#setHref(DownloadHandler) should be used. For simple links, LinkkiAnchor#setHref(String) should be used. -
The constructor FrontendDependencies#FrontendDependencies(ClassFinder) has been deprecated.
The constructor with full arguments FrontendDependencies#FrontendDependencies(ClassFinder, boolean, FeatureFlags, boolean) should be used instead.
Version 2.7.7
Version Updates
The following versions have been updated:
| Dependency | New version | Previous version |
|---|---|---|
Spring Boot |
3.4.12 (Release Notes) |
3.4.11 |
Logback |
1.5.21 |
1.5.20 |
Version 2.7.6
Version Updates
The following versions have been updated:
| Dependency | New version | Previous version |
|---|---|---|
Spring Boot |
3.4.11 (Release Notes) |
3.4.9 |
Bugfixes
-
In version
2.7.5, entering a value to a cell inside a table created with@UITableComponentand traversing with the tab-key results in loosing focus. Starting with2.7.6, the behavior has been fixed.
Version 2.7.5
Bugfixes
-
In version
2.7.4, the linkki-bom was published incorrectly and did not contain anydependencyManagemententries. This issue affects only version2.7.4. Starting with2.7.5, the BOM has been fixed and works as expected.
Version 2.7.4
Version Updates
The following versions have been updated:
Dependency |
New version |
Previous version |
Spring Boot |
3.4.9 (Release Notes) |
3.4.7 |
Version 2.7.3
Version Updates
The following versions have been updated:
Dependency |
New version |
Previous version |
Spring Boot |
3.4.5 (Release Notes) |
3.4.3 |
Version 2.7.2
Version Updates
The following versions have been updated:
Dependency |
New version |
Previous version |
Faktor-IPS |
25.1.3.release (Release Notes) |
25.1.2.release |
Vaadin |
24.5.14 (Release Notes) |
24.5.12 |
Bugfixes
-
Required fields (e.g.,
TextField,ComboBox) were not marked red when prefilled with an invalid value under certain conditions. This was a Vaadin bug that is fixed with this version. Note that the issue only appeared in 2.7.1 and does not affect 2.7.0.
Version 2.7.1
Version Updates
The following versions have been updated:
| Dependency | New version | Previous version |
|---|---|---|
Faktor-IPS |
25.1.2.release (Release Notes) |
25.1.0.release |
Vaadin |
24.5.12 (Release Notes) |
24.5.8 |
Spring Boot |
3.4.3 (Release Notes) |
3.4.1 |
Bugfixes
-
Loading indicator of a grid is not visible if placeholder is set and the grid does not have full height.
Version 2.7.0
The release notes contain changes compared to version 2.6.2.
Version Updates
The following versions have been updated:
| Dependency | New version | Previous version |
|---|---|---|
Faktor-IPS |
25.1.0.release (Release Notes) |
24.7.5.release |
Vaadin |
24.5.8 (Release Notes) |
24.4.16 |
Spring Boot |
3.4.1 (Release Notes) |
3.3.5 |
The Vaadin version update brings some notable changes that affect linkki applications:
-
New properties in
LumoUtility: InLumoUtilitynew properties have been added, most notably a utility class to setflexto 1. Existing custom CSS classes can thus be replaced by the new utility class. -
Setting
reactEnabletofalsein thevaadin-maven-pluginleads to a Vite error on startup of the application due to missing vaadin-router resources.
As the react router now behaves mostly like the legacy vaadin router, it may be an option to remove the configuration and use the default react router instead.
If the configuration should be kepft, the propertyvaadin.react.enableneeds to be set tofalsetoo. See https://vaadin.com/docs/latest/upgrading#opting-out-of-react
UI Annotations and Aspects
-
New annotation: @UICheckboxes
A new UI component,@UICheckboxes, is now available, providing a way to create a checkbox group for related binary choices. For more information, see here. -
New annotation: @UILongField
A new UI component,@UILongField, is now available, providing a way to accept a number with data typelong. For more information, see here. -
@UIComboBox: Automatically focus first applicable element
If a character or word is entered into a combobox and there is only one matching element, then this element gets selected automatically.- Example
-
A combobox has the values UP, DOWN, LEFT, RIGHT.
If the user enters 'u', the entry UP is selected automatically.
If the user enters 't', there are two possible matches (LEFT and RIGHT) and therefore no entry is selected automatically.
-
@UILabel: support for asynchronously loaded values
UILabelhas been enhanced to handle asynchronous value loading usingCompletableFutureas return type. A loading indicator will be displayed until the value is available. Refer to UILabel documentation for more details. -
New aspect annotation: @BindClosable for sections
A new aspect annotation,@BindClosable, is now available, providing a way to create closable sections with the option to have them initially closed. For more information, see here. -
@BindPlaceholder: support for sections
The @BindPlaceholder annotation can now be used on a@UISectionto set a placeholder text if the section has no child elements or all child elements are invisible.@BindPlaceholder on @UISection@BindPlaceholder @UISection(caption = "@UISection with @BindPlaceholder") public class SectionWithBindPlaceholder { public String getPlaceholder() { return "This section is empty"; } }The old solution using an extra
UILabelwith the styleLinkkiTheme.Text.TEXT_PLACEHOLDERis now obsolete and should be replaced as it did not work correctly with different layout options.Old solution with UILabel and style LinkkiTheme.Text.TEXT_PLACEHOLDER@UISection(caption = "@UISection with placeholder label") public class SectionWithPlaceholderLabel { @UILabel(position = 10, label = "", styleNames = LinkkiTheme.Text.TEXT_PLACEHOLDER) public String getPlaceholder() { return "This is a placeholder."; } }LinkkiTheme.Text.TEXT_PLACEHOLDERhas been deprecated and should not be used anymore as it did not work consistently for varying label width. Use@BindPlaceholderon@UISectioninstead (see above).
Other Improvements
-
Unique IDs for exceptions
If an exception occurs in the application, it will be displayed by the configured error handler or an error page in case of an exception during navigation. With the default configuration, the exception is now logged with a unique ID that is also displayed in the UI, making it easier to find the exception in the logs. Custom implementation may need to be adapted to be able to make use of this feature. -
Karibu testing: more utilities
TheKaribuUIExtensionhas been extended with possibilities to add error routes and to set production mode. The documentation has been improved accordingly.
Many useful methods were also added to the KaribuUtils to make it even easier to write Karibu tests, such as-
methods for printing out any component as String. This can be used to assert that certain text is or is not displayed anywhere in the UI, disregarding the placement or the actual component that is used.
-
methods for setting value input fields and consistently firing change events
-
methods for tables
-
-
Testbench extension: support for table placeholder
The new page objectLinkkiGridElementadds support to retrieve the placeholder text of a table. It can be used instead ofGridElement, e.g.$(LinkkiGridElement.class). -
Tutorial in the documentation
The linkki tutorial is now part of this documentation.
Bugfixes
-
LabelComponentWrapper#setLabel()now callsHasLabel#setLabel()if the component is an instance ofHasLabelinstead of setting the HTML property directly. -
The items of a table created with
@UITableComponentare now only fetched asynchronously if the return type isCompletableFuture. The documentation is updated accordingly. -
Card sections theme now only applies to dialogs if the theme is explicitly set on the dialog itself or a child layout.
-
The disabled and readonly style of radio buttons and checkboxes has been harmonised to follow the linkki style guidelines.
-
DefaultCaptionProvidernow takes the provided locale into account and translates the captions accordingly. -
The recommended .gitignore file is now added in generated archetype projects.
-
Components within a form layout that are required and have an empty/ blank label do not scroll anymore.
-
@UIDecimalFieldnow handles very large numbers without unwanted rounding. -
Previously, setting the value to
nullin@UIRadioButtonsfailed to check the appropriate radio button. Now, selectingnullcorrectly checks the "Not specified" radio button, ensuring proper representation.With this bug fix, the converter must now be able to handle null-valued presentation values. Although this was already part of the
Convertercontract, it can now lead to an exception inValueAspectDefinition. -
Disabled, readonly and checked radio buttons are now displayed correctly