30.66. <w:tree>

Tree提供了一个功能灵活而又简单易用的树型构件。它提供了以下特性:

  1. 支持静态定义树节点,也支持从服务器端异步装载节点数据

  2. 支持在服务器端动态增删和修改节点

  3. 提供了一组服务器端API,可编程控制树的行为

30.66.1. 构件信息

表 30.159. 构件信息

Component Typeorg.operamasks.faces.component.tree.impl.UITree
Component Familyorg.operamasks.faces.component.tree.impl.UITree
Component Classorg.operamasks.faces.component.tree.impl.UITree
Tag Classorg.operamasks.faces.webapp.widget.UITreeTag
Renderer Typeorg.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.66.2. 属性

表 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)
是否必须 延时求值
构件宽度的像素值

30.66.3. 构件API

30.66.3.1. TreeDataProviderAdapter(接口)

做动态树时建议使用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.66.3.2. UITree(Tree的构件类)

表 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: 是否级联操作
返回值 无返回值
方法描述 收缩某个特定的树节点

30.66.4. 示例

这个例子介绍了动态树的使用方法,树的节点从后台获取。

<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; 
		} 
	}; 
	... 
}