@UINestedComponent(position = 10, width = "50%")
public PersonPmo getPerson() {
return new PersonPmo();
}
@UIVerticalLayout
class PersonPmo {
@UITextField(position = 10, label = "Firstname")
public String getFirstname() {
return "Max";
}
@UITextField(position = 20, label = "Lastname")
public String getLastname() {
return "Mustermann";
}
}
Release Notes
Version 2.5.5
Dependency Updates
The following versions have been updated:
Faktor-IPS |
24.1.14.release |
Vaadin |
24.3.20 |
Spring Boot |
3.2.11 |
New features and improvements
Automatically focus first applicable element in combobox
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.
Version 2.5.4
New features and improvements
Dependency Updates
The following versions have been updated:
Faktor-IPS |
24.1.12.release |
Vaadin |
24.3.16 |
Spring Boot |
3.2.8 |
Version 2.5.3
New features and improvements
Dependency Updates
The following versions have been updated:
Faktor-IPS |
24.1.11.release |
Vaadin |
24.3.14 |
Spring Boot |
3.2.7 |
Karibu |
2.1.6 |
Version 2.5.2
New features and improvements
Dependency Updates
The following versions have been updated:
Faktor-IPS |
24.1.7.release |
Vaadin |
24.3.8 |
Spring Boot |
3.2.4 |
Karibu |
2.1.5 |
Bugfixes
Width of nested components
The width of nested components was fixed. Any value that is set as width
on @UINestedComponent
is now only applied to the layout element. The nested component itself gets a width of 100%.
In the following example the wrapping element of the @UIVerticalLayout
gets a width of 50% but the @UIVerticalLayout
itself has full width.
Version 2.5.1
New features and improvements
Dependency Updates
The following versions have been updated:
Faktor-IPS |
24.1.3.release |
Vaadin |
24.3.3 |
Spring Boot |
3.2.2 |
JUnit |
5.10.2 |
Karibu |
2.1.2 |
Bugfixes
Default Error Page Exception Handling
For better message handling in the LinkkiErrorPage
a new MessageException
was introduced.
-
On receiving a
MessageException
, the error page shows the message of this exception in production as well as in development mode. -
On receiving any other exception:
-
In development mode: a custom message or the exception message is shown to the user.
-
In production mode: only a generic error message is shown to the user to hide any sensitive information.
-
Additionally logging for the thrown exception has been added. MessageExceptions
are only logged if they contain a cause. All other exceptions are logged anyways.
Version 2.5.0
New features and improvements
Dependency Updates
The following versions have been updated:
Faktor-IPS |
24.1.1.release |
Vaadin |
24.3.2 |
Spring Boot |
3.2.1 |
Commons IO |
2.15.1 |
With Vaadin 24.2, the compile-scoped dependency Furthermore, the compile-scoped dependency |
Spring Boot has been updated to 3.2.1. Check the release notes for more information. |
Improved update behavior
The update behavior has been improved for two cases:
- Null model object
-
When using model binding, linkki would throw an exception if the model object is
null
upon creation or update until now. With this change, linkki would gracefully handle thenull
value. See null model object for more details. - Invisible PMOs
-
Updates of child bindings are now skipped entirely if the PMO is invisible. This reduces the number of unnecessary binding updates, making using nested components more efficient.
An initial update is still conducted upon the creation of child bindings, even in invisible PMOs. This necessitates null- and Exception-handling, particularly when direct model binding is absent. To address this, consider:
|
Additional utility for Karibu testing
KaribuUIExtension
and KaribuUtils
have been added to allow JUnit Testing with Karibu-Testing. To use these simply import the module 'linkki-vaadin-flow-test'.
See Testing with Karibu for more Details.
VaadinUIExtension has been deprecated since KaribuUIExtension not only offers the same functionality, but also additional features.
|
Member access utility methods cleaned up for public access
Classes such as PropertyAccessor
or MemberAccessors
are useful classes that can be used for aspect definitions, or when writing a custom UI annotation. MemberAccessors
offer methods to read field and method values, while PropertyAccessor
and find and read the value of a property using the getter method, as well as call the corresponding call or invoke method.
Up until now, these classes are intended for internal usage. With this version, they are moved to the linkki-utils
module to make them more accessible. Associated classes that should remain being used internally are made package private:
-
ReadMethod
-
WriteMethod
-
InvokeMethod
-
PropertyAccessorDescriptor
-
PropertyAccessorCache
PropertyAccessorCache#get
can be replaced with PropertyAccessor#get
. All other usages of the internal classes should be removed.
Removed generated Vaadin files
Files generated by Vaadin can now be removed from the repository without affecting the speed of the build. The advantage of this is that a Vaadin version update does not cause any further Git differences.
It is not required to list these files in .gitignore
since they are automatically deleted by the Vaadin build if they did not exist before.
Affected files, for example:
-
package.json
-
package-lock.json
-
tsconfig.json
-
types.d.ts
-
vite.config.ts
Partial support for null
model objects in IpsPropertyDispatcher
When determining a label from the Faktor-IPS model, the IpsPropertyDispatcher
now falls back to the declared model object class if the model object of a PMO is null
.
This behavior is only supported for labels.
Therefore, the constructor IpsPropertyDispatcher(Supplier, Supplier, String, PropertyDispatcher)
has been added. The second supplier can be used to provide the model object class used for the fallback.
The constructor IpsPropertyDispatcher(Supplier, String, PropertyDispatcher)
has been deprecated.
Overloaded Constructors for DialogBindingManager
and PmoBaseDialogFactory
The DialogBindingManager class has been enhanced to offer an overloaded constructor, which now accommodates an extra parameter of type PropertyDispatcherFactory. This enhancement provides flexibility by allowing the use of a custom PropertyDispatcherFactory, or falling back to the default Java constructor for PropertyDispatcherFactory.
Similarly, the PmoBasedDialogFactory class has also been equipped with an overloaded constructor that embraces the PropertyDispatcherFactory parameter, or reverting to the default Java constructor if needed. Additionally, the PmoBasedDialogFactory class has been seamlessly integrated with the recently introduced overloaded constructor of the DialogBindingManager class.
UITimeField
added
A new annotation @UITimeField has been added for selecting a time.
The annotation has the properties step
and precision
for configuring the time picker. The step
property sets the interval between items in the overlay, while precision
defines the smallest unit for time selection, supporting both minute and second intervals.
Improved Styling and Consistency for linkki Theme
Following table defines a mapping between linkki and Lumo color definitions. For each linkki color, the corresponding Lumo color is identified. It’s important to note that some linkki colors, such as --linkki-info-text-color, do not have a direct Lumo counterpart, marked as "N/A" in the table.
linkki Color | Lumo Color |
---|---|
--linkki-info-color |
N/A (custom color used) |
--linkki-info-text-color |
N/A (custom color used) |
--linkki-warning-color |
--lumo-warning-color |
--linkki-warning-text-color |
--lumo-warning-text-color |
---linkki-success-color |
--lumo-success-color |
--linkki-success-text-color |
--lumo-success-text-color |
--linkki-warning-text-color |
--lumo-warning-text-color |
--linkki-warning-text-color |
--lumo-warning-text-color |
The table below defines visual behaviors for icons and text based on their specific classes. These styles primarily target the vaadin-icon
component within linkki, enabling a more dynamic visual feedback system.
CSS Selector | Color Variable Used |
---|---|
icon-success > vaadin-icon |
--linkki-success-color |
icon-warning > vaadin-icon |
--linkki-warning-color |
icon-error > vaadin-icon |
--linkki-error-color |
icon-info > vaadin-icon.linkki-text-icon |
--linkki-info-color |
text-info |
--linkki-info-text-color |
linkki-text.text-success > span |
--lumo-success-text-color |
linkki-text.text-warning > span |
--lumo-warning-text-color |
linkki-text.text-error > span |
--lumo-error-text-color |
linkki-text.text-info > span |
--linkki-info-text-color |
There are a few selectors that have been deprecated in favor of new ones that are more consistent with linkki and Lumo.
Deprecated Selector | New Selector |
---|---|
LinkkiTheme#PLACEHOLDER_LABEL |
LinkkiTheme.Text#TEXT_PLACEHOLDER |
LinkkiApplicationTheme#TEXT_RIGHT_ALIGNED |
LumoUtility.TextAlign#RIGHT |
LinkkiApplicationTheme#MESSAGE_PREFIX |
MessageUiComponents#ICON_STYLE_CLASS_PREFIX |
IpsDialogCreator
Utility Class to create PmoBasedDialogFactory
with IpsPropertyDispatcherFactory
and ValidationService
The IpsDialogCreator
class was introduced to address instantiation complexities and provides methods such as create()
for default configuration and with(ValidationService validationService)
for custom validation settings, both of which return PmoBasedDialogFactory
with a preconfigured IpsPropertyDispatcher
.
Default Error Page for Exceptions During Navigation
With LinkkiErrorPage
, a default error page has been introduced that handles all kinds of unhandled exceptions thrown during navigation.
If found by the Vaadin component scan, the page will open automatically in described cases.
Sensitive information, such as detailed exception messages or stack traces, will not be shown in production environments.
Consult the documentation for further information on how to customize the layout as well as the provided error information.
ErrorDialogConfiguration
hides exception message in production mode by default
ErrorDialogConfiguration
now only shows the exception message by default if the application does not run in the production mode, else the message will not be added.
Consequently, a new method ErrorDialogConfiguration#showExceptionMessage()
has been introduced to customize this behavior.
The default vertical alignment of @UIHorizontalLayout
was set to baseline
This fixed the issue where error messages in a HorizontalLayout containing nested components within a Section were causing misalignment due to the VerticalLayout being set to "Middle". The fix involved setting the vertical alignment of UIHorizontalLayout to "Baseline", ensuring consistent alignment and enhancing visual cohesiveness and readability.
Other
-
The documentation that describes how to build and start an application created by the Spring Boot archetype has been adjusted to match the different requirements regarding development and production mode.
Bugfixes
-
Fixed wrong min-width in @UISection for layouts where the label is above the component
-
Fixed the issue where multiple screenshots taken for a single test case would overwrite each other
-
Fixed added child rows are not visible in hierarchical tables
-
Fixed @BindMessages not working on Grid column fields
-
Fixed empty rows in MessageTablePmo when duplicate messages are present
-
Missing English resource bundle has been added for
DatePickerI18nCreator
, which is used to internationalize aDatePicker
-
Fixed improperly indented content in ApplicationInfoPmo