30.35. <w:menu>

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会按照以下规则转换普通构件:

30.35.1. 构件信息

表 30.88. 构件信息

Component Typeorg.operamasks.faces.widget.Menu
Component Familyorg.operamasks.faces.widget.Menu
Component Classorg.operamasks.faces.component.widget.menu.UIMenu
Tag Classorg.operamasks.faces.webapp.widget.UIMenuTag
Renderer Typeorg.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.35.2. 属性

表 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.35.3. 构件API

30.35.3.1. UIMenu(Menu的构件类)

表 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:构件中需被移除的菜单项构件
返回值 无返回值
方法描述 移除指定的菜单项

30.35.4. 示例

下面的代码显示一个名为"文件"的菜单,包括"新建","打开...","保存","另存为...","关闭"几个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>