What’s New
This section covers new features of Jmix framework and Studio 2.6, as well as some breaking changes to be aware of when upgrading from a previous version of the framework.
How To Upgrade
To create new projects with Jmix 2.6 or to upgrade an existing project, you need Studio 2.6 or later, so update your Jmix Studio plugin first. The minimal supported IntelliJ IDEA version is now 2024.3. |
See Upgrading Project section for how to upgrade your project using Studio. The automatic migration procedure makes the following changes in your project:
-
Updates the version of Jmix BOM which in turn defines versions of all dependencies.
-
Updates the version of Jmix Gradle plugin.
-
Adds default values to
editorActionsColumn
buttons without assigned values in all project views. See details below. -
Renames the
id
attribute of thesettings.component
element tocomponentId
in all project views. See details below.
See also the full list of breaking changes that can affect your project after the upgrade.
New Features and Improvements
Studio Improvements
Jmix AI Assistant
The Jmix AI Assistant is now available in the Studio tool window.
Open it by clicking icon in the IDE’s right-hand toolbar.
The Jmix AI Assistant in Studio shares the list of chats with the web-based version, allowing seamless switching between them.
New Code Snippets
Added over 20 new UI-related code snippets in the following categories: notifications and dialogs, opening views and fragments, asynchronous execution, and API examples.
Moving Views
You can now easily relocate a view to another package using the Move View context menu action in the Jmix tool window. Studio will move the Java controller and the XML descriptor together, updating relevant message keys in the message bundle.
When moving a Java controller or XML descriptor in the Project tool window using the standard move operation, Studio prompts you to relocate the corresponding controller or descriptor and update message keys automatically.
Scaffolding Renderers
When generating a renderer for a UI component (e.g., for a dataGrid
column), Studio provides a wizard to scaffold a ComponentRenderer
, TextRenderer
, or an empty handler method.
Replacing Strings with Localized Messages
The new intention action Replace with localized message allows you to quickly replace a string literal with a localized message from the message bundle. It works in both Java and XML code.
Access this action by placing the cursor on a string literal and pressing Alt+Enter
.
Lombok Support
Studio now recognizes @Getter
and @Setter
annotations on entities and @RequiredArgConstructor
on Spring beans. If these annotations are present, Studio does not generate explicit code when adding attributes to entities and adding dependencies to beans.
Additionally, Studio displays a warning if it detects @EqualsAndHashCode
or @Data
annotations on entities (see the caution in the Entities section for explanation).
Switch Component
The new switch component allows users to toggle between two states (e.g., on/off or true/false). It mimics a physical toggle switch with a sliding handle.
Tabbed Application Mode Improvements
The Tabbed Application Mode add-on has been improved and now is ready for production use.
-
The
mainTabSheet
component is now explicitly defined in the main view layout. It can contain actions invoked through the tab context menu or using keyboard shortcuts. -
Drag and drop of tabs is now supported.
-
The
@TabbedModeViewProperties
annotation lets you define parameters of the view opened in a tab. -
The UI state is preserved when the web page is refreshed.
-
The
UIRefreshEvent
is fired each time a web page is refreshed.
The final version of the Tabbed Application Mode add-on requires the Enterprise subscription. |
Autocompletion in CodeEditor
The codeEditor
component now provides autocompletion for a specific language mode or using custom suggestion handlers.
See codeEditor: Suggestion for more information.
DataManager.saveWithoutReload method
The new DataManager.saveWithoutReload()
method improves performance when the saved instances are not immediately required for further processing. You can use it instead of the verbose save(new SaveContext().saving(entities).setDiscardSaved(true))
operation.
See Using DataManager: Saving Entities for more information.
Export/Import of Message Templates
In the Message Templates add-on, the Export and Import actions allow you to transfer templates between applications.
Refreshing Data in Calendars
In the Calendar add-on, you can now refresh callback data providers using the new refetchDataProvider()
methods of the FullCalendar
component.
Logout in Authorization Server
The Authorization Server add-on now performs standard logout actions (invalidates HTTP session, clears security context, removes session cookie) when navigating to the /logout
URL.
Additionally, the jmix.authserver.post-logout-url-redirect-parameter-name and jmix.authserver.use-referer-post-logout properties have been introduced.
REST DataStore Improvements
@RemoteService Interfaces
The REST DataStore add-on now offers a simple way of invoking remote services exposed via REST API. On the client side, you only need to create an interface that mirrors the service methods and annotate it with @RemoteService
.
See REST DataStore: @RemoteService Interfaces for more information.
OIDC Authentication
The REST DataStore add-on now includes the restds_RestOidcAuthenticator
bean that allows you to use an external authentication provider (for example Keycloak) when integrating applications.
See REST DataStore: External Authentication for more information.
Turning Off Lazy Loading
The jmix.eclipselink.disable-lazy-loading application property lets you turn off the lazy loading for the whole application.
Note that this is an experimental feature. It can be finalized or abandoned in a future release. If you encounter a problem when using this feature, please file an issue at GitHub.
Breaking Changes
Node.js v.20
Vaadin 24.7 requires Node.js 20+. If you are using a locally installed Node, upgrade it if needed.
Removed defaults of editorActionsColumn buttons
Previously, the nested buttons within the editorActionsColumn element had default values for certain attributes. Specifically, all buttons were assigned an icon
, while both the editButton
and cancelButton
had a text
attribute assigned.
This behavior was inconsistent and prevented from removing an icon or text from the button in an application project.
Now the buttons have no default values at all.
The Studio migration procedure scans all views in the project and automatically adds previous default values to the buttons that don’t have explicit values.
See #4493 for more information.
Renamed settings.component id attribute
The id
attribute of component
element in the settings facet has been renamed to componentId
to not confuse with the commonly used id
attribute. For example:
Jmix 2.5:
<facets>
<settings>
<component id="genericFilter"/>
</settings>
</facets>
Jmix 2.6+:
<facets>
<settings>
<component componentId="genericFilter"/>
</settings>
</facets>
The Studio migration procedure scans all views in the project and automatically renames this attribute.
See #4412 for more information.
Changes in Dynamic Attributes Views
The Dynamic Attributes management views were significantly redesigned. If you have overridden these views, adapt your code accordingly.
Changes in in-app-notification-list-view.xml
In the in-app-notification-list-view.xml
descriptor of the Notifications add-on, the create
action has been removed from inAppNotificationsDataGrid
. This action has been moved to the view’s actions
section and renamed to createNotificationAction
.
If you have overridden this view, adapt your code accordingly.