Что нового
В данном разделе приведена информация о новой функциональности и возможных несовместимых изменениях в фреймворке 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.
Его можно открыть, нажав на иконку в правой панели инструментов 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
на сущностях (см. пояснение в разделе Сущности).
Компонент 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.
Интерфейсы @RemoteService в REST DataStore
Дополнение REST DataStore теперь предоставляет простой способ вызова удаленных сервисов, доступных через REST API. На стороне клиента достаточно создать интерфейс, повторяющий методы сервиса, и пометить его аннотацией @RemoteService
.
Подробнее см. REST DataStore: Интерфейсы @RemoteService.
OIDC-аутентификация в REST DataStore
Дополнение REST DataStore теперь включает бин restds_RestOidcAuthenticator
, который позволяет использовать внешний провайдер аутентификации (например, Keycloak) при интеграции приложений.
Подробнее см. REST DataStore: Внешняя аутентификация.
Отключение ленивой загрузки
Свойство приложения 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
.
Если вы переопределяли этот экран, адаптируйте ваш код соответствующим образом.