A.5. menu.xml
这个类型的文件在 Web 客户端使用,定义应用程序的主菜单结构。
XML schema: http://schemas.haulmont.com/cuba/7.2/menu.xsd
这个文件的路径由 cuba.menuConfig 应用程序属性指定。当在 Studio 里面创建新项目的时候,会在 web 模块包的根目录创建 web-menu.xml
文件,比如 modules/web/src/com/company/sample/web-menu.xml
。
menu-config
– XML 根节点元素。menu-config
的元素组成了一个树状结构,这里 menu
元素是树枝,item
和 separator
元素是树叶。
menu
元素的属性:
item
元素的属性:
-
id
– 元素的唯一标识符。如果没有定义任何screen
,bean
,class
属性,此 id 用来指向具有相同 id 值的界面。当用户点击菜单项时,会在程序主窗口打开对应的界面。<item id="sample_Foo.browse"/>
-
caption
- 菜单元素的名称。如果未设置,名称会按照下文介绍的规则确定。<item id="sample_Foo.browse" caption="mainMsg://fooBrowseCaption"/>
-
screen
- 界面标识符。可以用这个标识符在菜单中多次包含同一界面。当用户点击菜单项时,会在程序主窗口打开对应的界面。<item id="foo1" screen="sample_Foo.browse"/> <item id="foo2" screen="sample_Foo.browse"/>
-
bean
- bean 名称。必须跟beanMethod
一起使用。当用户点击菜单项时,会调用 bean 的此方法。<item bean="sample_FooProcessor" beanMethod="processFoo"/>
-
class
- 实现了Runnable
、Consumer<Map<String, Object>>
或MenuItemRunnable
接口的类全名。当用户点击菜单项时,会创建指定类的一个对象,并调用其方法。<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 | - 调用 StandardEditor 的 setEntityToEdit() 方法,传递使用给定 id 和视图加载的实体实例。 |
menu-config.sales=Sales
menu-config.sales_Customer.lookup=Customers
如果没设置 id
,菜单元素的名称会通过类名(如果设置了 class
属性)或者 bean 名称和 bean 方法名称(如果设置了 bean
属性)生成,因此,推荐设置 id
属性。