Tree提供了一个功能灵活而又简单易用的树型构件。它提供了以下特性:
支持静态定义树节点,也支持从服务器端异步装载节点数据
支持在服务器端动态增删和修改节点
提供了一组服务器端API,可编程控制树的行为
表 30.159. 构件信息
| Component Type | org.operamasks.faces.component.tree.impl.UITree |
| Component Family | org.operamasks.faces.component.tree.impl.UITree |
| Component Class | org.operamasks.faces.component.tree.impl.UITree |
| Tag Class | org.operamasks.faces.webapp.widget.UITreeTag |
| Renderer Type | org.operamasks.faces.component.tree.impl.UITree |
| Renderer Class(AJAX) | org.operamasks.faces.render.widget.ajax.AjaxTreeRenderer |
+java.lang.Object
++javax.faces.component.UIComponent
+++javax.faces.component.UIComponentBase
++++org.operamasks.faces.component.tree.base.UITreeBase
+++++org.operamasks.faces.component.tree.impl.UITree
表 30.160. 属性
| autoHeight | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否允许构件自适应高度 | ||||
| autoLeaf | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否需要自动判断一个结点是否为叶结点。此值为真时,叶结点会自动使用叶结点的样式展示,但需要额外的取数动作进行判断。此值为假时,所有结点一开始均展现为非叶结点,直到用户试图展开叶结点时,才会改为叶结点样式。(默认值:false) | ||||
| autoScroll | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 在内容超过构件的Size时,是否允许出现滚动条 | ||||
| binding | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | javax.el.ValueExpression(javax.faces.component.UIComponent) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。 | ||||
| bodyStyle | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 容器内元素使用的CSS样式 | ||||
| border | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否显示面板body元素的边框(默认值:true) | ||||
| expandAll | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否展开所有节点 | ||||
| height | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件高度的像素值 | ||||
| hlColor | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 当结点高亮显示时使用的颜色(默认为#C3DAF9) | ||||
| id | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | java.lang.String | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。 | ||||
| initConfig | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Object) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 取值可以是ExtConfig对象, 或String,表示一个JavaScript对象,比如:{"a": "avalue", "b":true, "c":200, "d":"var::dvalue"} 如果取值是表示一个JavaScript对象的String,则key必须用(双)引号包起来,比如"a"。 | ||||
| jsvar | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件的客户端Javascript变量 | ||||
| loadAllNodes | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否一次性加载所有节点 | ||||
| oncheck | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件被选中时执行的JavaScript代码 | ||||
| onclick | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件被点击时执行的JavaScript代码 | ||||
| oncollapsenode | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件节点收缩时执行的JavaScript代码 | ||||
| oncontextmenu | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件的上下文菜单显示时执行的JavaScript代码 | ||||
| onexpandnode | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件节点展开时执行的JavaScript代码 | ||||
| onselect | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件被选择时执行的JavaScript代码 | ||||
| queueId | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| dataGrid的delegate请求队列的ID。只有web.xml中配置了org.operamasks. faces.CLIENT_DELEGATE_QUEUE=true,该属性才有意义。该属性的默认值为delegate_request_load_queue_id | ||||
| queueTimeout | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Double) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| form中发起的Ajax请求排队的超时时间(单位:秒),当queueId属性设置时生效. | ||||
| rendered | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | boolean(boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。 | ||||
| rootVisible | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否显示树的根节点 | ||||
| style | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件渲染时应用到构件的CSS风格,对应于元素的style属性 | ||||
| styleClass | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件的CSS风格类名,若需要定义多个,以空格分开 | ||||
| value | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(org.operamasks.faces.component.tree.base.TreeDataProvider) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| tree的节点数据,类型必须是org.operamasks.faces.component.tree.base.TreeDataProvider | ||||
| width | 定义类 | org.operamasks.faces.component.tree.impl.UITree | ||
| 类型 | javax.el.ValueExpression(java.lang.Integer) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件宽度的像素值 | ||||
做动态树时建议使用TreeDataProviderAdapter,可复写以下所有函数。
表 30.161. 方法
| getChildren | 方法签名 | public Object[] getChildren(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 子节点的user data数组 | |
| 方法描述 | 得到所有子节点的user data组成的数组 | |
| getText | 方法签名 | public String getText(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 节点的文本 | |
| 方法描述 | 得到节点的文本 | |
| getIcon | 方法签名 | public String getIcon(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 节点的图标,如果不要图标则返回null,如果要显示ext默认的图标则返回"",如果要显示自定义的图标则返回一个图片的路径 | |
| 方法描述 | 得到节点的图标,如果不要图标则返回null,如果要显示ext默认的图标则返回"",如果要显示自定义的图标则返回一个图片的路径 | |
| getHref | 方法签名 | public String getHref(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 节点的网址 | |
| 方法描述 | 得到节点的网址 | |
| getHrefTarget | 方法签名 | public String getHrefTarget(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 要显示节点网址的目标iframe的name | |
| 方法描述 | 得到要显示节点网址的目标iframe的name | |
| isChecked | 方法签名 | public Boolean isChecked(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 返回null则没有checkbox,返回true表示一个勾中的checkbox,返回false表示一个没有勾中的checkbox | |
| 方法描述 | 是否要一个checkbox框(要checkbox框时还可以设置它的checked状态) | |
| isExpanded | 方法签名 | public boolean isExpanded(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 节点是否展开 | |
| 方法描述 | 节点是否展开 | |
| isCascade | 方法签名 | public boolean isCascade(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 有checkbox框时改变一个节点的checkbox状态是否同时影响其父节点和子节点(即级联选择) | |
| 方法描述 | 当选中节点的时候,是否影响其父节点和子节点,需要父节点和子节点也为true才生效 | |
| getId | 方法签名 | public String getId(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 当前树结点的唯一标识id | |
| 方法描述 | 获得当前树结点的唯一标识id(注意:id不能以数字开头,且只能使用数字、大小写字母、下划线) | |
| getCls | 方法签名 | public String getCls(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 构件的css样式的样式名 | |
| 方法描述 | 构件的css样式的样式名 | |
| getIconCls | 方法签名 | public String getIconCls(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 节点图标的css样式的样式名 | |
| 方法描述 | 节点图标的css样式的样式名 | |
| getQtip | 方法签名 | public String getQtip(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 节点的鼠标指针弹出提示信息 | |
| 方法描述 | 节点的鼠标指针弹出提示信息 | |
| isDisabled | 方法签名 | public boolean isDisabled(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 是否使当前节点无效 | |
| 方法描述 | 是否使当前节点无效 | |
| isLeaf | 方法签名 | public boolean isLeaf(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 当前节点是否为叶子节点 | |
| 方法描述 | 当前节点是否为叶子节点 | |
| isSingleClickExpand | 方法签名 | public boolean isSingleClickExpand(Object userData) |
| 参数说明 | 当前节点的userData | |
| 返回值 | 是否允许单击时展开节点 | |
| 方法描述 | 是否允许单击时展开节点(默认双击才会展开节点) |
表 30.162. 常用方法
| add | 方法签名 | public UITreeNode add(UITreeNode node) |
| 参数说明 | 要添加的节点 | |
| 返回值 | 添加后的新节点 | |
| 方法描述 | 给树加上节点 | |
| collapseAll | 方法签名 | public void collapseAll() |
| 参数说明 | 无参数 | |
| 返回值 | 无返回值 | |
| 方法描述 | 指定首次显示Tree构件时,所有树节点呈收缩状态 | |
| expandAll | 方法签名 | public void expandAll() |
| 参数说明 | 无参数 | |
| 返回值 | 无返回值 | |
| 方法描述 | 指定首次显示Tree构件时,所有树节点呈展开状态 | |
| getCheckedNodes | 方法签名 | public List<UITreeNode> getCheckedNodes() |
| 参数说明 | 无参数 | |
| 返回值 | 树的所有选中节点的List | |
| 方法描述 | 得到树上所有勾中的节点 | |
| getEventNode | 方法签名 | public UITreeNode getEventNode() |
| 参数说明 | 无参数 | |
| 返回值 | 当前操作的树节点 | |
| 方法描述 | 得到当前操作的树节点 | |
| getPartlyCheckedNodes | 方法签名 | public List<UITreeNode> getPartlyCheckedNodes() |
| 参数说明 | 无参数 | |
| 返回值 | 树的所有半选中(因子结点被选中而级联选中)节点的List | |
| 方法描述 | 得到树上所有半勾中的节点,出于效率考虑,建议使用UITreeNode.getPartlyCheckedChildren() | |
| getRootNode | 方法签名 | public UITreeNode getRootNode() |
| 参数说明 | 无参数 | |
| 返回值 | 树的根节点 | |
| 方法描述 | 获取树的根节点 | |
| loadAllNodes | 方法签名 | public void loadAllNodes() |
| 参数说明 | 无参数 | |
| 返回值 | 无返回值 | |
| 方法描述 | 获取所有树节点数据 | |
| expand | 方法签名 | public void expand(String treeNodeId, boolean deep) |
| 参数说明 | treeNodeId: 待展开树节点id, deep: 是否级联操作 | |
| 返回值 | 无返回值 | |
| 方法描述 | 展开某个特定的树节点 | |
| collapse | 方法签名 | public void collapse(String treeNodeId, boolean deep) |
| 参数说明 | treeNodeId: 待收缩树节点id, deep: 是否级联操作 | |
| 返回值 | 无返回值 | |
| 方法描述 | 收缩某个特定的树节点 |
这个例子介绍了动态树的使用方法,树的节点从后台获取。
<w:form> <w:tree id="componentTree" border="false" style="height:100%;width:100%;" loadAllNodes="true" /> </w:form>
Managed Bean代码,由于是动态树,树的节点数据实现接口TreeDataProvider:
@ManagedBean(name = "IndexBean", scope = ManagedBeanScope.SESSION)
public class IndexBean {
@Bind
private UITree componentTree;
@Bind(id = "componentTree")
private TreeDataProvider treeData = new TreeDataProvider() {
public Object[] getChildren(Object userData) {
return TreeDataLoader.getInstance().getChildren(userData);
}
public String getHref(Object userData) {
return null;
}
public String getHrefTarget(Object userData) {
return null;
}
public String getIcon(Object userData) {
return "";
}
public String getText(Object userData) {
return TreeDataLoader.getInstance().getText(userData);
}
public boolean isCascade(Object userData) {
return false;
}
public Boolean isChecked(Object userData) {
return null;
}
public boolean isExpanded(Object userData) {
if ("Demos".equals(userData))
return true;
return false;
}
};
...
}