Мы рады объявить о выпуске Jmix 2.6, который включает новую функциональность, улучшения и оптимизацию производительности. Этот релиз приносит значительные обновления в Jmix Studio, представляет новые UI-компоненты и повышает продуктивность благодаря умным инструментам и интеграциям.
Ниже представлен краткий обзор ключевых возможностей Jmix 2.6.
Улучшения в Studio
Jmix AI Assistant
Jmix AI Assistant теперь интегрирован в панель инструментов Jmix Studio. Помощник в Studio синхронизирует историю чатов со своим веб-аналогом, обеспечивая бесшовный переход между Studio и веб-браузером.

Новые сниппеты кода
Jmix 2.6 добавляет более 20 новых сниппетов, связанных с UI: уведомления и диалоги, открытие экранов и фрагментов, асинхронное выполнение и примеры API. Эти сниппеты ускоряют и упрощают реализацию типовых UI-паттернов в ваших проектах.

Перемещение экранов
Теперь перемещать экраны между пакетами стало проще благодаря действию контекстного меню Move View в панели Jmix. Эта функция перемещает вместе и Java-контроллер, и XML-дескриптор, автоматически обновляя ключи сообщений в бандле. Кроме того, при перемещении Java-контроллера или XML-дескриптора в панели Project, Studio также предложит переместить соответствующий файл и обновить ключи сообщений.

Создание рендереров для UI-компонентов, таких как колонки dataGrid
, стало более интуитивным. Studio предлагает мастер для генерации ComponentRenderer
, TextRenderer
или пустого метода-обработчика, упрощая создание кастомных UI-рендереров.
Замена строк на локализованные сообщения
Новое действие Replace with localized message (доступное в Java и XML-коде) позволяет быстро заменять строковые литералы на локализованные сообщения из бандла.
Например, представьте, что у вас есть следующий код в дескрипторе экрана:
@Subscribe
public void onInit(final InitEvent event) {
someLabel.setText("Hello World");
}
Установите курсор на строку "Hello World" и нажмите Alt+Enter
. Выберите действие Jmix: Replace with localized message, и Studio откроет диалог для создания локализованного сообщения. После ввода ключа и нажатия OK код изменится следующим образом:
@ViewComponent
private MessageBundle messageBundle;
@Subscribe
public void onInit(final InitEvent event) {
someLabel.setText(messageBundle.getMessage("label.text"));
}
Поддержка Lombok
Studio теперь поддерживает аннотации @Getter
и @Setter
на сущностях и @RequiredArgConstructor
на Spring-бинах, избегая избыточного кода. Также добавлено предупреждение об использовании @EqualsAndHashCode
или @Data
на сущностях, что может привести к проблемам из-за некорректной реализации equals/hashCode.
Производительность в крупных проектах
Производительность Studio значительно улучшена для больших проектов. Дерево проекта в панели Jmix и редактор ролей теперь работают быстро, даже если проект содержит более 1000 сущностей.
Новые UI-компоненты и возможности
Компонент Switch
Представляем новый компонент Switch, позволяющий переключаться между двумя состояниями (например, вкл/выкл или true/false). Его дизайн имитирует физический переключатель с движущимся элементом, добавляя современный стиль в ваш UI.

Улучшения в Tabbed Application Mode
Дополнение Tabbed Application Mode теперь полностью готово к использованию и получило ряд улучшений:
Компонент
mainTabSheet
явно определяется в компоновке главного экрана, поддерживая действия через контекстное меню вкладок или горячие клавиши, а также перетаскивание вкладок.Аннотация
@TabbedModeViewProperties
для определения параметров экрана во вкладках.Сохранение состояния UI и вызов
UIRefreshEvent
при обновлении страницы.

Автодополнение в CodeEditor
Компонент codeEditor
теперь поддерживает автодополнение для определённых языковых режимов или кастомных обработчиков предложений.

Размещение в слотах HorizontalLayout
Компонент hbox
теперь поддерживает добавление компонентов в слоты start
, center
или end
, упрощая позиционирование внутри HorizontalLayout
. Например:
<hbox id="horizontalBox" width="100%" css="border: 1px solid black;" padding="true">
<startSlot>
<textField label="Start component" width="9em"/>
</startSlot>
<middleSlot>
<textField label="Middle component" width="9em"/>
</middleSlot>
<endSlot>
<textField label="End component" width="9em"/>
</endSlot>
</hbox>

Экспорт/импорт шаблонов сообщений
Дополнение Message Templates теперь поддерживает действия Export и Import, упрощая перенос шаблонов между приложениями.
Улучшения в REST DataStore
В дополнении REST DataStore упрощен вызов удалённых сервисов через REST API. Теперь для этого достаточно создать интерфейс, отражающий методы сервиса, и пометить его аннотацией @RemoteService
.
Кроме того, теперь в дополнение входит бин restds_RestOidcAuthenticator
, позволяющий использовать внешний провайдер аутентификации (например, Keycloak) при интеграции приложений.
Библиотека UI-тестирования Masquerade
Jmix 2.6 представляет Masquerade — библиотеку для end-to-end тестирования UI, разработанную специально для Jmix-приложений. Основанная на Selenium WebDriver и Selenide, Masquerade упрощает тестирование, предоставляя удобные обёртки и облегчая доступ к функциям веб-элементов.
Обновлённые зависимости
Релиз Jmix 2.6 включает обновления основных зависимостей:
Spring Boot версии 3.5.
Vaadin версии 24.7.
Эти обновления гарантируют, что Jmix продолжает работать на современной, безопасной и производительной основе.
Планы на будущее
Следующий функциональный релиз ожидается в октябре 2025 года. Мы сосредоточимся на следующем функционале:
Группировка в компоненте DataGrid
Новый компонент UserMenu
Визуализация модели данных
Дополнение SAML
Возможность определять отчёты в Java-коде
Реверс-инжиниринг: генерация атрибутов из колонок БД для уже отображённых сущностей
Заключение
Jmix 2.6 представляет мощные новые функции и улучшения, призванные повысить продуктивность разработчиков и расширить возможности приложений.
Если у вас есть вопросы, вы хотите поделиться опытом или просто пообщаться с другими пользователями, присоединяйтесь к нам на форуме или в Telegram.
Большое спасибо всем участникам сообщества за отчеты об ошибках, запросы на функциональность, идеи и предложения. Мы надеемся, что Jmix 2.6 принесёт ещё больше успеха вашим проектам