Файлы данного типа используются в блоке Web Client для описания структуры главного меню приложения.

Схема XML доступна по адресу http://schemas.haulmont.com/cuba/7.2/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 - уникальный идентификатор элемента.

    • caption - заголовок элемента меню. Если не задан, заголовок формируется по правилам, описанным ниже.

    • description - текст, появляющийся во всплывающей подсказке при наведении курсора мыши. Можно использовать локализованные сообщения из главного пакета сообщений.

    • icon - значок для элемента меню. См. icon.

    • insertBefore, insertAfter - идентификатор элемента или пункта меню, перед которым или после которого нужно вставить данный элемент. Используется в прикладном проекте для вставки элемента в нужное место меню, определенного в аналогичных файлах компонентов приложения. Разумеется, использование одного из этих атрибутов для конкретного элемента исключает возможность использования второго атрибута для данного элемента.

    • stylename - задает имя стиля пункта меню. См. Темы приложения.

  • Атрибуты элемента item:

    • id - уникальный идентификатор элемента. Если не определены атрибуты screen, bean, class, то id используется для указания на экран с таким же id. При выборе пункта меню в главном окне приложения будет открыт соответствующий экран.

      <item id="sample_Foo.browse"/>
    • caption - заголовок элемента меню. Если не задан, заголовок формируется по правилам, описанным ниже.

      <item id="sample_Foo.browse" caption="mainMsg://fooBrowseCaption"/>
    • 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. При выборе пункта меню будет создан экземпляр данного класса и вызван его метод.

      <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:

Пример файла меню:

<menu-config xmlns="http://schemas.haulmont.com/cuba/menu.xsd">

    <menu id="sales" insertBefore="administration">
        <item id="sales_Order.lookup"/>

        <separator/>

        <item id="sales_Customer.lookup" openType="DIALOG"/> (1)

        <item screen="sales_CustomerInfo">
            <properties>
                <property name="stringParam" value="some string"/> (2)
                <property name="customerParam" (3)
                          entityClass="com.company.demo.entity.Customer"
                          entityId="0118cfbe-b520-797e-98d6-7d54146fd586"/>
            </properties>
        </item>

        <item screen="sales_Customer.edit">
            <properties>
                <property name="entityToEdit" (4)
                          entityClass="com.company.demo.entity.Customer"
                          entityId="0118cfbe-b520-797e-98d6-7d54146fd586"
                          entityView="_local"/>
            </properties>
        </item>
    </menu>

</menu-config>
1 - открыть экран в диалоговом окне.
2 - вызвать метод setStringParam(), передавая в него some string.
3 - вызвать метод setCustomerParam(), передавая в него экземпляр сущности загруженный по данному id.
4 - вызвать метод setEntityToEdit() класса StandardEditor, передавая в него экземпляр сущности загруженный по данному id и представлению.
menu-config.sales=Sales
menu-config.sales_Customer.lookup=Customers

Если атрибут id не задан, имя элемента меню будет составлено из имени класса (если задан атрибут class) или имени бина и его метода (если задан атрибут bean), поэтому для локализации рекомендуется указывать атрибут id.