CommandMenuItem是一种普通的菜单项,必须作为Menu的子元素才可以使用。
表 30.22. 构件信息
| Component Type | org.operamasks.faces.widget.CommandMenuItem |
| Component Family | javax.faces.Command |
| Component Class | org.operamasks.faces.component.widget.menu.UICommandMenuItem |
| Tag Class | org.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.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 | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 构件的当前值 | ||||
假设有一个“文件”菜单,有新建、打开、保存和另存为等常用的操作,这些操作的行为都类似一个按钮,所以这里用到了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();
}
......
}