初次接触ToolBar的用户可能会奇怪,ToolBar与MenuBar似乎是如此相似,以至于产生是否有必要使用ToolBar的疑虑。然而面对用户越来越挑剔审美眼光,MenuBar构件实在有些难当重任,而且复杂的嵌套也极易忘记闭合构件。反观ToolBar,它不但可以包含Menu构件,还可以直接包含Combo、Button等构件,极大的方便了用户编写页面。
表 30.156. 构件信息
| Component Type | org.operamasks.faces.component.widget.UIToolBar |
| Component Family | org.operamasks.faces.component.widget.UIToolBar |
| Component Class | org.operamasks.faces.component.widget.UIToolBar |
| Tag Class | org.operamasks.faces.webapp.toolbar.UIToolBarTag |
| Renderer Type | org.operamasks.faces.component.widget.UIToolBar |
| Renderer Class | org.operamasks.faces.render.widget.ajax.AjaxToolBarRender |
+java.lang.Object
++javax.faces.component.UIComponent
+++javax.faces.component.UIComponentBase
++++org.operamasks.faces.component.toolbar.base.UIToolBarBase
+++++org.operamasks.faces.component.widget.UIToolBar
表 30.157. 属性
| binding | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | javax.el.ValueExpression(javax.faces.component.UIComponent) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。 | ||||
| id | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | java.lang.String | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。 | ||||
| jsvar | 定义类 | org.operamasks.faces.component.widget.UIToolBar | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 客户端脚本使用的javascript变量名,使用此变量名可以引用脚本中javascript对象 | ||||
| rendered | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | boolean(boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。 | ||||
| style | 定义类 | org.operamasks.faces.component.widget.UIToolBar | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件渲染时应用到构件的CSS风格, 对应于元素的style属性 | ||||
| styleClass | 定义类 | org.operamasks.faces.component.widget.UIToolBar | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件上的CSS样式类 | ||||
| target | 定义类 | org.operamasks.faces.component.widget.UIToolBar | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 分页器所在容器的id,若未指定则为父容器 | ||||
下面例子介绍了w:toolBar的用法。例子也使用了w:menuBar,目的是将两者进行对比,使用户了解ToolBar的优越性。
首先创建托管Bean:
@ManagedBean(scope = ManagedBeanScope.REQUEST)
public class ToolBarBean {
private SelectItem[] colors = { new SelectItem("Red", "Red Color"),
new SelectItem("Green", "Green Color"),
new SelectItem("Blue", "Blue Color")
};
public SelectItem[] getColors() {
return colors;
}
}下面是页面代码:
<!-- ToolBar -->
<w:toolBar id="toolBar1" jsvar="toolBar1Jsvar" style="width:400">
<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:separator />
<w:linkMenuItem label="关闭" value="toolbar.jsp"
onclick="return confirm('Are you sure?')" />
</w:menu>
<w:separator />
<!-- 在ToolBar中放置Combo -->
<w:combo emptyText="请选择颜色..." typeAhead="true"
valueChangeListener="#{ToolBarBean.valueChange}">
<f:selectItems value="#{ToolBarBean.colors}" />
</w:combo>
<w:separator />
<!-- 在ToolBar中放置Button -->
<w:button value="Click me" action="#{ToolBarBean.click}" />
</w:toolBar>
<br />
<!-- MenuBar -->
<w:menuBar>
<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:separator />
<w:linkMenuItem label="关闭" value="toolbar.jsp"
onclick="return confirm('Are you sure?')" />
</w:menu>
<!-- 由于MenuBar不能直接放置Combo和Button 所以省略 -->
</w:menuBar>通过这个例子可以看出,ToolBar不但简单易用,而且有许多MenuBar所不具备的功能。