RichFaces树组件的用法

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/5719401 RichFaces树组件的用法原创:版权所有chszsRichFaces Tree组件提供了一个缺省的数据模型,允许显示简单的树结构,无需创建自己的树模型类集。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/5719401

RichFaces树组件的用法

原创:版权所有chszs


RichFaces Tree组件提供了一个缺省的数据模型,允许显示简单的树结构,无需创建自己的树模型类集。
下面的例子说明了从属性文件的数据生成树目录。

选择左边树组件的节点,右边会显示出相应的节点名。如图所示:

 

如上图所示,建立图示页面的步骤如下:

一、搭建RichFaces开发环境,这一步省略;

二、编辑页面:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j"> <mce:style><!-- .col,.col2 { width: 50%; vertical-align: top; } --></mce:style><style mce_bogus="1">.col,.col2 { width: 50%; vertical-align: top; }</style> <h:form> <fieldset> <legend>Directory Tree</legend> <h:panelGrid columns="2" width="100%" columnClasses="col1,col2"> <rich:tree style="width:150px;" nodeSelectListener="#{simpleTreeBean.processSelection}" reRender="selectedNode" ajaxSubmitSelection="true" switchType="client" value="#{simpleTreeBean.treeNode}" var="item"> </rich:tree> <h:outputText escape="false" value="Selected Node:#{simpleTreeBean.nodeTitle}" id="selectedNode" /> </h:panelGrid> </fieldset> </h:form> </ui:composition>

页面文件需说明两点:

1)<rich:tree>组件的ajaxSubmitSelection属性,为真时表示支持Ajax提交;

2)<rich:tree>组件的value属性,其值是org.richfaces.model.TreeNode类的实例。

 

三、属性文件:

1=/u7CFB/u7EDF/u7BA1/u7406 1.1=/u6743/u9650/u5206/u914D 1.2=/u89D2/u8272/u7BA1/u7406 1.3=/u5BC6/u7801/u4FEE/u6539 1.4=/u5BC6/u7801/u7B56/u7565 1.5=/u7CFB/u7EDF/u65E5/u5FD7 1.5.1=/u7528/u6237/u65E5/u5FD7 1.5.2=/u64CD/u4F5C/u8BB0/u5F55 2=/u8BBE/u5907/u7BA1/u7406 2.1=DVB-2 2.2=DTV-4 3=/u5458/u5DE5/u7BA1/u7406 3.1=/u5458/u5DE5/u4FE1/u606F 3.2=/u8BF7/u5047/u60C5/u51B5

转码后的文字如图所示:

 

四、托管Bean文件

package chcms.view.mbeans; import org.richfaces.component.html.HtmlTree; import org.richfaces.event.NodeSelectedEvent; import org.richfaces.model.TreeNode; import org.richfaces.model.TreeNodeImpl; import java.io.IOException; import java.io.InputStream; import java.util.*; import javax.faces.FacesException; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; public class SimpleTreeBean { private TreeNode rootNode = null; private List<String> selectedNodeChildren = new ArrayList<String>(); private String nodeTitle; private static final String DATA_PATH="/test/simple-tree-data.properties"; public TreeNode getTreeNode(){ if(rootNode == null){ loadTree(); } return rootNode; } public String getNodeTitle(){ return nodeTitle; } public void setNodeTitle(String nodeTitle){ this.nodeTitle = nodeTitle; } private void addNodes(String path, TreeNode node, Properties properties){ boolean end = false; int counter = 1; while(!end){ String key = path != null ? path+'.'+counter:String.valueOf(counter); String value = properties.getProperty(key); if(value!=null){ TreeNodeImpl nodeImpl = new TreeNodeImpl(); nodeImpl.setData(value); node.addChild(new Integer(counter), nodeImpl); addNodes(key, nodeImpl, properties); counter++; }else{ end = true; } } } private void loadTree(){ FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext = facesContext.getExternalContext(); InputStream dataStream = externalContext.getResourceAsStream(DATA_PATH); try{ Properties properties = new Properties(); properties.load(dataStream); rootNode = new TreeNodeImpl(); addNodes(null, rootNode, properties); }catch(IOException e){ throw new FacesException(e.getMessage()); }finally{ if(dataStream!=null){ try{ dataStream.close(); }catch(IOException e){ externalContext.log(e.getMessage(), e); } } } } public void processSelection(NodeSelectedEvent event){ HtmlTree tree = (HtmlTree)event.getComponent(); nodeTitle = (String)tree.getRowData(); selectedNodeChildren.clear(); TreeNode currentNode = tree.getModelTreeNode(tree.getRowKey()); if(currentNode.isLeaf()){ selectedNodeChildren.add((String)currentNode.getData()); }else{ Iterator<Map.Entry<Object, TreeNode>> it = currentNode.getChildren(); while(it!=null && it.hasNext()){ Map.Entry<Object, TreeNode> entry = it.next(); selectedNodeChildren.add(entry.getValue().getData().toString()); } } } }

托管Bean需说明几点:

1)DATA_PATH表示属性文件的路径;

2)addNodes()方法采用了递归算法,需注意;

3)需理解java.util.Properties的用法;

4)理解构造树组件的缺省实现类org.richfaces.model.TreeNodeImpl类。

 

五、RichFaces配置文件:

<managed-bean> <managed-bean-name>simpleTreeBean</managed-bean-name> <managed-bean-class>chcms.view.mbeans.SimpleTreeBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>

 

 

以上内容能实现图示例子。一些次要步骤省略!

 

 

 

 

目录
相关文章
|
10天前
【sgTree】自定义组件:加载el-tree树节点整棵树数据,实现增删改操作。
【sgTree】自定义组件:加载el-tree树节点整棵树数据,实现增删改操作。
|
7月前
|
存储 算法 C语言
树模板总结
树模板总结
|
5月前
|
JSON 前端开发 Java
Java实现树的格式化打印以及返回前端json树
Java实现树的格式化打印以及返回前端json树
29 0
|
8月前
|
JavaScript
封装递归tree组件
封装递归tree组件
20 0
|
9月前
|
JavaScript
vue实现菜单项数组转化为树形结构
vue实现菜单项数组转化为树形结构
79 0
|
10月前
|
API
【Vue3 第十三章】动态组件 & 递归组件 & 组件别名
【Vue3 第十三章】动态组件 & 递归组件 & 组件别名
132 0
|
JavaScript
学习Vue3 第十五章(全局组件,局部组件,递归组件)
例如组件使用频率非常高(table,Input,button,等)这些组件 几乎每个页面都在使用便可以封装成全局组件
148 0
学习Vue3 第十五章(全局组件,局部组件,递归组件)
|
前端开发 JavaScript
el-tree树组件的懒加载写法步骤
el-tree树组件的懒加载写法步骤
496 0
|
JavaScript
vue组件的递归自调用~代码思路分析
vue组件的递归自调用~代码思路分析
232 0
|
JSON JavaScript 前端开发
使用Python3.7+Django2.0.4配合vue.js2.0的组件递归来实现无限级分类(递归层级结构)
所谓的无限极分类是啥?其实简单点说就是一个人类可以繁衍出多个后代,然后一个后代又可以分另外多个后代这样无限繁衍下去(可以想象[神奇动物在哪里2](https://movie.douban.com/subject/26147417/)里面莱斯特兰奇的家族族谱),就好象linux系统你可以新建一个文件夹,然后在这个文件夹里又可以建一些个文件夹,在文件夹底下还可以建一些文件夹一样,随后使用tree命令就可以查看文件夹目录层级。
使用Python3.7+Django2.0.4配合vue.js2.0的组件递归来实现无限级分类(递归层级结构)