Файлы данного типа используются в блоке 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.