Что нового

В данном разделе приведена информация о новой функциональности и возможных несовместимых изменениях в фреймворке Jmix и Jmix Studio версии 2.6. Примите их во внимание при обновлении с предыдущей версии фреймворка.

Для создания новых проектов в Jmix 2.6 или для апгрейда существующего проекта требуется Studio 2.6 или более поздней версии, поэтому в первую очередь обновите плагин Jmix Studio.

Минимальная требуемая версия IntelliJ IDEA - 2024.3.

Раздел Апгрейд проекта содержит информацию о том, как обновить проект с помощью Studio. Процедура автоматической миграции вносит следующие изменения в ваш проект:

  • Обновляет версию Jmix BOM, которая, в свою очередь, определяет версии всех зависимостей.

  • Обновляет версию Jmix Gradle plugin.

  • Добавляет предыдущие значения по умолчанию атрибутам кнопок в editorActionsColumn, которые не имеют явных значений, во всех экранах проекта. Подробнее см. ниже.

  • Переименовывает атрибут id элемента settings.component в componentId во всех экранах проекта. Подробнее см. ниже.

См. полный список критических изменений, которые могут затронуть ваш проект после обновления.

Обновленные зависимости

Следующие основные зависимости были обновлены:

Новая и улучшенная функциональность

Улучшения в Studio

Ассистент Jmix AI

Ассистент Jmix AI теперь доступен в окне инструментов Studio. Его можно открыть, нажав на иконку jmix ai big в правой панели инструментов IDE.

Ассистент Jmix AI в Studio синхронизирует список чатов с веб-версией, позволяя легко переключаться между ними.

Новые Code Snippets

Добавлено более 20 новых сниппетов, связанных с UI, в следующих категориях: уведомления и диалоги, открытие экранов и фрагментов, асинхронное выполнение и примеры API.

Перемещение экранов

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

При перемещении Java-контроллера или XML-дескриптора в окне Project с помощью стандартной операции перемещения Studio предложит перенести соответствующий контроллер или дескриптор и также автоматически обновит ключи сообщений.

Генерация рендереров

При создании рендерера для UI-компонента (например, для колонки dataGrid) Studio предоставляет мастер для генерации ComponentRenderer, TextRenderer или пустого метода-обработчика.

Замена строк локализованными сообщениями

Новое intention-действие Replace with localized message позволяет быстро заменить строковый литерал на локализованное сообщение из бандла. Оно работает как в Java, так и в XML-коде.

Чтобы вызвать это действие, поместите курсор на строковый литерал и нажмите Alt+Enter.

Поддержка Lombok

Теперь Studio распознает аннотации @Getter и @Setter на сущностях и @RequiredArgConstructor на Spring-бинах. Если эти аннотации присутствуют, Studio не генерирует явный код при добавлении атрибутов к сущностям и зависимостей к бинам.

Кроме того, Studio показывает предупреждение, если обнаруживает аннотации @EqualsAndHashCode или @Data на сущностях (см. пояснение в разделе Сущности).

Производительность на крупных проектах

Производительность Studio на больших проектах значительно улучшилась. Дерево проекта в окне инструментов Jmix и дизайнер ресурсных ролей теперь работают быстро даже в проектах с более чем 1000 сущностей.

Компонент Switch

Новый компонент switch позволяет пользователям переключаться между двумя состояниями (например, вкл/выкл`или `true/false). Он имитирует физический переключатель-слайдер с движущейся ручкой.

Улучшения в Tabbed Application Mode

Дополнение Tabbed Application Mode было улучшено и теперь подходит для production-использования.

  • Компонент mainTabSheet теперь явно определяется в главном экране. Он может содержать действия, вызываемые через контекстное меню вкладки или с помощью горячих клавиш.

  • Поддерживается перетаскивание вкладок.

  • Аннотация @TabbedModeViewProperties позволяет определить параметры экрана, открываемого во вкладке.

  • Состояние UI сохраняется при обновлении веб-страницы.

  • Событие UIRefreshEvent генерируется каждый раз при обновлении веб-страницы.

Финальная версия дополнения Tabbed Application Mode требует Enterprise-подписки.

Автодополнение в CodeEditor

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

Подробнее см. в разделе codeEditor: Автодополнение.

Метод DataManager.saveWithoutReload

Новый метод DataManager.saveWithoutReload() улучшает производительность, когда сохраненные экземпляры не требуются для дальнейшей обработки сразу. Вы можете использовать его вместо громоздкой операции save(new SaveContext().saving(сущности).setDiscardSaved(true)).

Подробнее см. в разделе Работа с DataManager: Сохранение сущностей.

Экспорт/импорт шаблонов сообщений

В дополнении Message Templates действия Export и Import позволяют переносить шаблоны между приложениями.

Обновление данных в календарях

В дополнении Calendar теперь можно обновлять провайдеры данных с помощью новых методов refetchDataProvider() компонента FullCalendar.

Logout в сервере авторизации

Дополнение Authorization Server теперь выполняет стандартные действия для выхода из системы (аннулирует HTTP-сессию, очищает контекст безопасности, удаляет сессионную cookie) при переходе по URL /logout.

Кроме того, были добавлены свойства jmix.authserver.post-logout-url-redirect-parameter-name и jmix.authserver.use-referer-post-logout.

Новые возможности в REST DataStore

Интерфейсы @RemoteService в REST DataStore

Дополнение REST DataStore теперь предоставляет простой способ вызова удаленных сервисов, доступных через REST API. На стороне клиента достаточно создать интерфейс, повторяющий методы сервиса, и пометить его аннотацией @RemoteService.

OIDC-аутентификация в REST DataStore

Дополнение REST DataStore теперь включает бин restds_RestOidcAuthenticator, который позволяет использовать внешний провайдер аутентификации (например, Keycloak) при интеграции приложений.

Отключение ленивой загрузки

Свойство приложения jmix.eclipselink.disable-lazy-loading позволяет отключить ленивую загрузку для всего приложения.

Обратите внимание, что это экспериментальная функция. Она может быть доработана или удалена в будущих версиях. Если вы столкнулись с проблемой при использовании этой функции, пожалуйста, создайте issue на GitHub.

Критические изменения

Node.js v.20

Vaadin 24.7 требует Node.js 20 или выше. Если вы используете локально установленный Node, обновите его при необходимости.

Удалены значения по умолчанию для кнопок editorActionsColumn

Ранее вложенные кнопки внутри элемента editorActionsColumn имели значения по умолчанию для некоторых атрибутов. В частности, всем кнопкам назначалась иконка (icon), а кнопки editButton и cancelButton также имели атрибут text.

Такое поведение было непоследовательным и не позволяло убрать иконку или текст с кнопки в проекте приложения.

Теперь кнопки не имеют значений по умолчанию.

Процедура миграции в Studio сканирует все экраны в проекте и автоматически добавляет предыдущие значения по умолчанию для кнопок, у которых нет явно указанных значений.

Подробнее см. #4493.

Переименован атрибут id у component.settings

Атрибут id элемента component в фасете settings был переименован в componentId, чтобы избежать путаницы с часто используемым атрибутом id. Например:

Jmix 2.5:

<facets>
    <settings>
        <component id="genericFilter"/>
    </settings>
</facets>

Jmix 2.6+:

<facets>
    <settings>
        <component componentId="genericFilter"/>
    </settings>
</facets>

Процедура миграции в Studio сканирует все экраны в проекте и автоматически переименовывает этот атрибут.

Подробнее см. #4412.

Изменения в экранах Dynamic Attributes

Экраны управления Dynamic Attributes были значительно переработаны. Если вы переопределяли эти экраны, адаптируйте ваш код соответствующим образом.

Изменения в in-app-notification-list-view.xml

В дескрипторе in-app-notification-list-view.xml дополнения Notifications действие create было удалено из inAppNotificationsDataGrid. Это действие перенесено в секцию actions экрана и переименовано в createNotificationAction.

Если вы переопределяли этот экран, адаптируйте ваш код соответствующим образом.

Список изменений

  • Решенные проблемы в Jmix Framework:

  • Решенные проблемы в Jmix Studio: