A.5. menu.xml
Файлы данного типа используются в блоке Web Client для описания структуры главного меню приложения.
Схема XML доступна по адресу http://schemas.haulmont.com/cuba/7.0/menu.xsd.
Расположение файла menu.xml
задается в свойстве приложения cuba.menuConfig. При создании нового проекта в Studio, она создает файл web-menu.xml
в корневом пакете модуля web, например modules/web/src/com/company/sample/web-menu.xml
.
menu-config
- корневой XML-элемент файла. Элементы menu-config
образуют древовидную структуру, в которой элементы menu
представляют собой ветви, а элементы item
и separator
- листья.
-
Атрибуты элемента
menu
:-
id
- уникальный идентификатор элемента. Локализованный заголовок элемента меню формируется по id (см. ниже). -
description
- текст, появляющийся во всплывающей подсказке при наведении курсора мыши. Можно использовать локализованные сообщения из главного пакета сообщений. -
icon
- значок для элемента меню. См. icon. -
insertBefore
,insertAfter
- идентификатор элемента или пункта меню, перед которым или после которого нужно вставить данный элемент. Используется в прикладном проекте для вставки элемента в нужное место меню, определенного в аналогичных файлах компонентов приложения. Разумеется, использование одного из этих атрибутов для конкретного элемента исключает возможность использования второго атрибута для данного элемента. -
stylename
- задает имя стиля пункта меню. См. Темы приложения.
-
-
Атрибуты элемента
item
:-
id
- уникальный идентификатор элемента. Локализованный заголовок элемента меню формируется по id (см. ниже). Если не определены атрибутыscreen
,bean
,class
, то id используется для указания на экран с таким же id. При выборе пункта меню в главном окне приложения будет открыт соответствующий экран.<item id="sample_Foo.browse"/>
-
screen
- идентификатор экрана (например,sample_Foo.browse
). Может быть использован для включения в меню одного и того же экрана несколько раз. При выборе пункта меню в главном окне приложения будет открыт соответствующий экран.<item id="foo1" screen="sample_Foo.browse"/> <item id="foo2" screen="sample_Foo.browse"/>
-
bean
- имя бина. Атрибут должен использоваться совместно сbeanMethod
. При выборе пункта меню будет вызван метод бина.<item bean="sample_FooProcessor" beanMethod="processFoo"/>
-
class
- полное имя класса, который должен реализовать интерфейсRunnable
илиConsumer<Map<String, Object>>
, илиMenuItemRunnabl
. При выборе пункта меню будет создан экземпляр данного класса и вызван его методrun()
.<item class="com.company.sample.web.FooProcessor"/>
-
description
- текст, появляющийся во всплывающей подсказке при наведении курсора мыши. Можно использовать локализованные сообщения из главного пакета сообщений.<item id="sample_Foo.browse" description="mainMsg://fooBrowseDescription"/>
-
shortcut
- горячая клавиша для вызова данного пункта меню. Возможные модификаторы -ALT
,CTRL
,SHIFT
- отделяются символом “-”. Например:shortcut="ALT-C" shortcut="ALT-CTRL-C" shortcut="ALT-CTRL-SHIFT-C"
Горячие клавиши можно также задавать в свойствах приложения и использовать в
menu.xml
следующим образом:shortcut="${sales.menu.customer}"
-
openType
- тип открытия экрана, возможные значения соответствуют перечислениюOpenMode
:NEW_TAB
,THIS_TAB
,DIALOG
. По умолчанию -NEW_TAB
. -
icon
- значок для элемента меню. См. icon. -
insertBefore
,insertAfter
- идентификатор элемента или пункта меню, перед которым или после которого нужно вставить данный элемент. -
resizable
- актуально для типа открытия экранаDIALOG
- задает окну возможность изменения размера. Возможные значения:true
,false
. По умолчанию главное меню не влияет на возможность изменения размера диалоговых окон. -
stylename
- задает имя стиля пункта меню. См. Темы приложения.
-
-
Вложенные элементы
item
:-
param
- задает параметр экрана, передаваемый в мэп методаinit()
контроллера (это устаревший API). Параметры, заданные вmenu.xml
, переопределяют одноименные параметры, заданные в screens.xml.Атрибуты
param
:-
name
- имя параметра -
value
- значение параметра. Строковое значение может преобразовываться в некоторый объект по следующим правилам:-
Если строка представляет собой идентификатор сущности, записанный по правилам класса
EntityLoadInfo
, то загружается указанный экземпляр сущности. -
Если строка имеет вид
${some_name}
, то значением параметра будет свойство приложенияsome_name
. -
Строки
true
иfalse
преобразуются в соответствующие значения типаBoolean
. -
Если ничего из вышеперечисленного не подходит, значением параметра становится сама строка.
-
-
-
permissions
- элемент, позволяющий задать набор разрешений текущего пользователя, при которых данный пункт меню доступен. Данный механизм имеет смысл использовать только если необходимо привязать доступность пункта к специфическим разрешениям, или не к одному, а к нескольким разрешениям сразу. В большинстве случаев достаточно стандартной возможности подсистемы безопасности управлять доступностью пунктов меню по идентификаторам экранов.Данный элемент должен содержать вложенные элементы
permission
, каждый из которых описывает одно требуемое разрешение. Пункт меню доступен только при наличии всех требуемых разрешений.Атрибуты
permission
:-
type
- тип требуемого разрешения, задаваемый значением перечисленияPermissionType
:SCREEN
,ENTITY_OP
,ENTITY_ATTR
,SPECIFIC
,UI
. -
target
- объект, на который проверяется наличие разрешения. Зависит от типа разрешения:-
SCREEN
- идентификатор экрана, напримерsales$Customer.lookup
. -
ENTITY_OP
- строка вида{entity_name}:{op}
, где{op}
-read
,create
,update
,delete
. Например:sales$Customer:create
. -
ENTITY_ATTR
- строка вида{entity_name}:{attribute}
, напримерsales$Customer:name
. -
SPECIFIC
- идентификатор специфического разрешения, напримерsales.runInvoicing
. -
UI
- путь к визуальному компоненту экрана.
-
-
-
Пример файла меню:
<menu-config xmlns="http://schemas.haulmont.com/cuba/menu.xsd">
<menu id="sales" insertBefore="administration">
<item id="sales_Customer.lookup"/>
<separator/>
<item id="sales_Order.lookup"/>
</menu>
</menu-config>
menu-config.sales=Sales
menu-config.sales$Customer.lookup=Customers
Если атрибут id
не задан, имя элемента меню будет составлено из имени класса (если задан атрибут class
) или имени бина и его метода (если задан атрибут bean
), поэтому для локализации рекомендуется указывать атрибут id
.