Menu构件是一个可以包含Menu和MenuItem的容器,Menu的父构件可以是MenuBar或者ContextMenu,Menu甚至可以黏着在其它普通OperaMasks构件上显示。
Menu中包含子Menu构件时,会组合形成级联菜单。Menu中可以添加多种形式的MenuItem,目前包括w:commandMenuItem,w:linkMenuItem,w:checkMenuItem,w:separator,w:radioMenuItem,w:dateMenu等。
Menu构件还具备将一些普通构件转换成MenuItem的能力,Menu会按照以下规则转换普通构件:
h:commandLink会被转换成w:commandMenuItem
h:outputLink会被转换成w:linkMenuItem
h:outputText会被转换成w:textMenuItem
h:selectBooleanCheckbox会被转换成w:checkMenuItem
h:selectOneRadio会被转换成w:radioMenuItem
表 30.88. 构件信息
| Component Type | org.operamasks.faces.widget.Menu |
| Component Family | org.operamasks.faces.widget.Menu |
| Component Class | org.operamasks.faces.component.widget.menu.UIMenu |
| Tag Class | org.operamasks.faces.webapp.widget.UIMenuTag |
| Renderer Type | org.operamasks.faces.widget.Menu |
| Renderer Class(AJAX) | org.operamasks.faces.render.widget.ajax.AjaxMenuRenderer |
+java.lang.Object
++javax.faces.component.UIComponent
+++javax.faces.component.UIComponentBase
++++javax.faces.component.UICommand
+++++org.operamasks.faces.component.widget.menu.base.UIMenuBase
++++++org.operamasks.faces.component.widget.menu.UIMenu
表 30.89. 属性
| action | 定义类 | javax.faces.component.UICommand | ||
| 类型 | javax.el.MethodExpression(javax.el.MethodExpression) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 特定Action事件激活时调用的方法 | ||||
| actionListener | 定义类 | javax.faces.component.UICommand | ||
| 类型 | javax.el.MethodExpression(javax.el.MethodExpression) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 特定ActionEvent事件激活时调用的方法 | ||||
| activeClass | 定义类 | org.operamasks.faces.component.widget.menu.UIMenu | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 当构件处于激活状态时使用的的CSS风格类名 | ||||
| binding | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | javax.el.ValueExpression(javax.faces.component.UIComponent) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。 | ||||
| disabled | 定义类 | org.operamasks.faces.component.widget.menu.UIMenu | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否为可用状态 | ||||
| disabledClass | 定义类 | org.operamasks.faces.component.widget.menu.UIMenu | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 当构件处于禁用状态时使用的的CSS风格类名 | ||||
| id | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | java.lang.String | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。 | ||||
| image | 定义类 | org.operamasks.faces.component.widget.menu.UIMenu | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 菜单上显示的图标 | ||||
| immediate | 定义类 | javax.faces.component.UICommand | ||
| 类型 | javax.el.ValueExpression(boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否跳过验证 | ||||
| jsvar | 定义类 | org.operamasks.faces.component.widget.menu.UIMenu | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 客户端脚本使用的javascript变量名,引用脚本中Ext.menu.Menu对象 | ||||
| label | 定义类 | org.operamasks.faces.component.widget.menu.UIMenu | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 菜单上显示的标签文本 | ||||
| rendered | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | boolean(boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。 | ||||
| style | 定义类 | org.operamasks.faces.component.widget.menu.UIMenu | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件渲染时应用到构件的CSS风格,对应于元素的style属性 | ||||
| styleClass | 定义类 | org.operamasks.faces.component.widget.menu.UIMenu | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 空格分隔的CSS风格类名列表,渲染时作为元素的"class"属性 | ||||
| triggerJsvar | 定义类 | org.operamasks.faces.component.widget.menu.UIMenu | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 客户端脚本使用的javascript变量名,引用脚本中Ext.menu.Menu对象上的按钮 | ||||
| value | 定义类 | javax.faces.component.UICommand | ||
| 类型 | java.lang.String | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 构件的当前值 | ||||
表 30.90. 常用方法
| addMenu | 方法签名 | public void addMenu(UIMenu menu) |
| 参数说明 | menu:需要添加到构件中的UIMenu | |
| 返回值 | 无返回值 | |
| 方法描述 | 追加一个菜单构件作为当前菜单的子菜单 | |
| addMenu | 方法签名 | public void addMenu(int index, UIMenu menu) |
| 参数说明 | index::插入位置。menu:待添加的菜单构件。 | |
| 返回值 | 无返回值 | |
| 方法描述 | 在指定位置插入一个菜单构件作为当前菜单的子菜单 | |
| addMenuItem | 方法签名 | public void addMenu(UIComponent item) |
| 参数说明 | item:待添加的子构件。可接受UICommandMenuItem、UICheckMenuItem、UIRadioMenuItem、UILinkMenuItem、UICalendar、UISeparator、HtmlOutputText、HtmlOutputLink、UIChooseSkin等类型的构件。 | |
| 返回值 | 无返回值 | |
| 方法描述 | 添加一个构件作为当前菜单的子构件。 | |
| addMenuItem | 方法签名 | public void addMenuItem(int index, UIComponent item) |
| 参数说明 | index:在构件中第index个菜单项位置前插入一项菜单项; item:添加为菜单项的构件 | |
| 返回值 | 无返回值 | |
| 方法描述 | 在指定位置插入一个构件作为当前菜单的子构件。 | |
| removeAll | 方法签名 | public void removeAll() |
| 参数说明 | 无参数 | |
| 返回值 | 无返回值 | |
| 方法描述 | 移除构件包含的所有构件 | |
| removeMenu | 方法签名 | public void removeMenu(UIMenu menu) |
| 参数说明 | menu:需被移除的UIMenu | |
| 返回值 | 无返回值 | |
| 方法描述 | 移除指定的菜单 | |
| removeMenuItem | 方法签名 | public void removeMenuItem(UIComponent item) |
| 参数说明 | item:构件中需被移除的菜单项构件 | |
| 返回值 | 无返回值 | |
| 方法描述 | 移除指定的菜单项 |
下面的代码显示一个名为"文件"的菜单,包括"新建","打开...","保存","另存为...","关闭"几个MenuItem。其中"关闭"为LinkMenuItem,会导航到../index.html页面,其它菜单项为CommandMenuItem,会调用#{MenuBean.menuAction}。
<w:menuBar id="mymenu" action="#{MenuBean.menuAction}" autoExpand="false">
<w:menu label="文件">
<w:commandMenuItem image="images/new.gif" label="新建" />
<w:commandMenuItem image="images/open.gif" label="打开..."/>
<w:commandMenuItem image="images/save.gif" label="保存"/>
<w:commandMenuItem label="另存为..." disabled="true"/>
<w:separator/>
<w:linkMenuItem label="关闭" value="../index.html" onclick="return confirm('Are you sure?')"/>
</w:menu>
</w:menuBar>下面一段代码,和上面的代码产生同样的效果,但是采用了传统的JSF构件h:commandLink和h:outputLink替换w:commandMenuItem和w:linkMenuItem。
<w:menuBar id="mymenu" action="#{MenuBean.menuAction}" autoExpand="false">
<w:menu label="文件">
<h:commandLink image="images/new.gif" label="新建" />
<h:commandLink image="images/open.gif" label="打开..."/>
<h:commandLink image="images/save.gif" label="保存"/>
<h:commandLink label="另存为..." disabled="true"/>
<w:separator/>
<h:outputLink label="关闭" value="../index.html" onclick="return confirm('Are you sure?')"/>
</w:menu>
</w:menuBar>