30.10. <w:commandMenuItem>

CommandMenuItem是一种普通的菜单项,必须作为Menu的子元素才可以使用。

30.10.1. 构件信息

表 30.22. 构件信息

Component Typeorg.operamasks.faces.widget.CommandMenuItem
Component Familyjavax.faces.Command
Component Classorg.operamasks.faces.component.widget.menu.UICommandMenuItem
Tag Classorg.operamasks.faces.webapp.widget.UICommandMenuItemTag
Renderer Type(DEFAULT)javax.faces.Link
Renderer Type(MENU)org.operamasks.faces.widget.LinkMenuItem
Renderer Class(AJAX MENU)org.operamasks.faces.render.widget.ajax.AjaxCommandMenuItemRenderer

继承体系

+java.lang.Object

++javax.faces.component.UIComponent

+++javax.faces.component.UIComponentBase

++++javax.faces.component.UICommand

+++++javax.faces.component.html.HtmlCommandLink

++++++org.operamasks.faces.component.widget.menu.base.UICommandMenuItemBase

+++++++org.operamasks.faces.component.widget.menu.UICommandMenuItem

30.10.2. 属性

表 30.23. 属性

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.UICommandMenuItem
类型 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.UICommandMenuItem
类型 javax.el.ValueExpression(boolean)
是否必须 延时求值
用户是否可与该对象交互
disabledClass 定义类 org.operamasks.faces.component.widget.menu.UICommandMenuItem
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件不可用状态时的css样式
id 定义类 javax.faces.component.UIComponentBase
类型 java.lang.String
是否必须 延时求值
这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。
image 定义类 org.operamasks.faces.component.widget.menu.UICommandMenuItem
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
菜单项的图标
immediate 定义类 javax.faces.component.UICommand
类型 javax.el.ValueExpression(boolean)
是否必须 延时求值
是否跳过验证
label 定义类 org.operamasks.faces.component.widget.menu.UICommandMenuItem
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
菜单项显示的文本
onclick 定义类 javax.faces.component.html.HtmlCommandLink
类型 java.lang.String
是否必须 延时求值
在用户用鼠标左键单击对象时触发
rendered 定义类 javax.faces.component.UIComponentBase
类型 boolean(boolean)
是否必须 延时求值
一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。
style 定义类 javax.faces.component.html.HtmlCommandLink
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
为该设置元素设置内嵌样式
styleClass 定义类 javax.faces.component.html.HtmlCommandLink
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
设置或获取对象的样式类
value 定义类 javax.faces.component.UICommand
类型 java.lang.String
是否必须 延时求值
构件的当前值

30.10.3. 构件API

30.10.4. 示例

假设有一个“文件”菜单,有新建、打开、保存和另存为等常用的操作,这些操作的行为都类似一个按钮,所以这里用到了CommandMenuItem,如下代码,这里还用到了菜单的嵌套,所有菜单项的事件响应是通过w:menuBar的"action"属性绑定的MenuBean.menuAction来响应的。

<w:menuBar id="mymenu" action="#{MenuBean.menuAction}" autoExpand="false">
    <w:menu label="文件">
        <w:menu image="images/new.gif" label="新建">
            <w:commandMenuItem label="文本文件"/>
            <w:commandMenuItem label="XML文件"/>
            <w:commandMenuItem label="Java文件"/>
        </w:menu>
        <w:commandMenuItem image="images/open.gif" label="打开..."/>
        <w:commandMenuItem image="images/save.gif" label="保存"/>
        <w:commandMenuItem label="另存为..." disabled="true"/>
    </w:menu>
</w:menuBar>

服务器端根据判断这个菜单项的文本,调用不同的方法去做不同的事情。

public String menuAction(UIComponent item) {
  String label = (String)item.getAttributes().get("label"); 
  if("打开...".equals(label)){
    open(); 
  } else if("保存".equals(label)){
    save(); 
  } else if("另存为...".equals(label)){ 
    saveAs(); 
  } 
  ...... 
}