Конфигурация меню
MenuConfig - это особый класс, который загружает структуру главного меню на основе файла, указанного в свойстве jmix.ui.menu-config.
| Используйте Дизайнер меню Studio, чтобы определить структуру меню. |
При создании нового проекта в Studio, генерируется файл menu.xml, который определяет структуру главного меню приложения.
<menu-config xmlns="http://jmix.io/schema/flowui/menu">
<menu id="main-menu"
title="msg://com.company.onboarding/menu.application.title"
description="Application menu items"
opened="true"
icon="DOT_CIRCLE"
classNames="application-menu">
<item id="Department.list"/>
<separator/>
<item view="City.list" id="cities"/>
</menu>
</menu-config>
Существует два режима загрузки файлов, определяющих структуру меню: составной (по умолчанию) и одиночный. Используйте свойство jmix.ui.composite-menu, чтобы переключать эти режимы.
Давайте подробно рассмотрим файл menu.xml.
menu-config - это корневой элемент XML. Элементы menu-config образуют структуру дерева, где элементы menu являются ветвями, а элементы item и separator - листьями.
Атрибуты меню
menu - это вложенный элемент menu-config. Он имеет следующие атрибуты:
-
id- уникальный идентификатор элемента. -
title- заголовок элементаmenu. Если не указан, заголовок определяется по правилу, объясненному ниже. -
description- текстовое описание, отображаемое во всплывающей подсказке при наведении мыши. Вы можете использовать локализованные сообщения из пакета сообщений. -
icon- значок элементаmenu. -
classNames- определяет имя класса для элемента меню. -
opened- определяет, будет ли элементmenuизначально развернут. Значение по умолчанию -false.
Например:
<menu id="main-menu"
title="msg://com.company.onboarding/menu.application.title"
description="Application menu items"
opened="true"
icon="DOT_CIRCLE"
classNames="application-menu">
<item id="Department.list"/>
<separator/>
<item view="City.list" id="cities"/>
</menu>
Атрибуты элемента
item - это вложенный элемент menu. Для каждого элемента можно установить атрибуты, свойства, параметры маршрута и параметры запроса.
Атрибуты следующие:
-
id- уникальный идентификатор элемента. Если не указаны атрибутыviewилиbean, идентификатор используется для указания на представление с этимid. Когда пользователь нажимает на элемент меню, соответствующее представление открывается на главном экране.<item id="Department.list"/> -
title- заголовок элементаitem. Вы можете использовать локализованные сообщения из пакета сообщений. Если не указан, заголовок будет определен по правилу, объясненному ниже.<item view="User.list" title="msg://com.company.onboarding.view.user/UserListView.title"/> -
description- текстовое описание, отображаемое во всплывающей подсказке при наведении мыши. Вы можете использовать локализованные сообщения из пакета сообщений. -
view- идентификатор экрана. Он может использоваться для включения одного экрана в меню несколько раз. Когда пользователь нажимает на элемент меню, открывается соответствующий экран на главном экране.<item view="City.list" id="cities1"/> <item view="City.list" id="cities2"/> -
bean- имя бина. Должно использоваться вместе сbeanMethod. Когда пользователь нажимает на элемент меню, вызывается указанный метод.menu.xml<item bean="MenuBean" beanMethod="browseCities" title="Show Cities"/>MenuBean.java@Component("MenuBean") public class MenuBean { @Autowired private ViewNavigationSupport viewNavigationSupport; public void browseCities() { viewNavigationSupport.navigate(CityListView.class); } }Вы можете передавать параметры из элемента меню в метод бина, используя вложенный элемент properties. Например:
menu.xml<item bean="MenuBean" beanMethod="openLink" id="openBeanWithParams" title="External Link"> <properties> <property name="url" value="https://jmix.io"/> </properties> </item>MenuBean.java@Component("MenuBean") public class MenuBean { public void openLink(Map<String, Object> parameters) { String url = (String) parameters.get("url"); if (url == null) { return; } UI.getCurrent().getPage().open(url); } } -
shortcutCombination- горячая клавиша для этого элемента меню. Возможные модификаторы -ALT,CTRL,SHIFT- разделяются символом "-". Например:<item view="City.list" id="cities3" shortcutCombination="ALT-C"/>Горячие клавиши также можно настроить в файле
application.properties, а затем использовать в файлеmenu.xmlследующим образом:menu.xml<item view="City.list" id="cities4" shortcutCombination="${sample.menu.city}"/>application.propertiessample.menu.city=ALT-SHIFT-C -
icon- значок элементаitem. -
className- определяет имя класса для элемента меню.
Свойства элемента меню
Элемент item может иметь свойства, которые передаются бинам. Вложенный элемент properties является контейнером для таких свойств, которые определены в дочерних элементах property. Элемент property может иметь следующие атрибуты:
-
name- имя свойства. -
value- значение, которое нужно установить для этого свойства.
Параметры маршрута
Элемент item может объявлять параметры маршрута внутри своего дочернего элемента routeParameters.
Маршрут, который определяет URL-путь к экрану, может включать параметр маршрута. Один из примеров такого параметра - это идентификатор конкретного экземпляра сущности, передаваемый в экран деталей. Следующий элемент меню открывает экран деталей для определенного отдела:
<item view="Department.detail" title="HR Department">
<routeParameters>
<parameter name="id" value="9b77a432-1610-5147-ff93-e7ee27c26e09"/>
</routeParameters>
</item>
Параметры запроса URL
Элемент item может объявлять один или несколько параметров запроса внутри своего дочернего элемента urlQueryParameters.
<item view="City.list" title="Query Parameters">
<urlQueryParameters>
<parameter name="page" value="3"/>
<parameter name="sort" value="desc"/>
</urlQueryParameters>
</item>
Параметры запроса представляют собой пары имя-значение, прикрепленные к концу URL после вопросительного знака (?). Несколько параметров запроса объединяются в строку запроса с использованием амперсанда (&). Приведенный выше пример создаст элемент меню, указывающий на следующий URL:
https://example.com/cities?page=3&sort=desc
Определение заголовка меню
Если атрибут title не задан, заголовок элемента menu или item определяется как комбинация префикса menu-config и идентификатора элемента. Получившаяся строка может использоваться как ключ, который определяет заголовок в пакете сообщений. Например:
menu-config.Departments.list = Departments
menu-config.cities = Cities
Если id для пункта меню не указан, для задания ему заголовка в пакете сообщений за префиксом menu-config может следовать имя экрана или имя бина и имя метода бина, разделенные символом #, в зависимости от наличия соответствующих атрибутов.