`
hemin108
  • 浏览: 93859 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

zk 手动添加树的节点

    博客分类:
  • Zk
阅读更多
/** copyRight 2010 huaguan
 *  All rights reserved   
 * Create on 2010-9-9 下午05:59:27
 * by hemin Email:303645105@qq.com
 */
package com;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treecell;
import org.zkoss.zul.Treechildren;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.Treerow;

public class AddChild extends GenericForwardComposer {

	private static final long serialVersionUID = 7306934226849116514L;
	// 前台树的id
	private Tree tree;
	// 输入框id
	private Textbox cellName;
	// 当前选择item
	private Treeitem treeItemSelected;

	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
	}

	// 点击添加子节点事件
	public void onClick$add() {
		String cellNameStr = cellName.getValue();
		treeItemSelected = tree.getSelectedItem();
		addItem(treeItemSelected, cellNameStr);

	}

	/**
	 * 在选择的节点下添加子节点
	 * 
	 * @param treeitem
	 *            当前选择的节点
	 * @param Str
	 *            需要增加的节点名字
	 */
	private void addItem(Treeitem treeitem, String Str) {
		Treecell treecell = new Treecell(Str);
		Treerow treerow = new Treerow();
		treecell.setParent(treerow);// tree cell只能在 tree row里面
		if (treeitem.getTreerow() == null) {// 一个tree item只能有一个Tree
											// row,item下无row时首先添加一个row
			treeitem.appendChild(treerow);
		} else if (treeitem.getTreechildren() == null) {// 一个tree
														// item只能有一个可选的Tree
														// children
			Treechildren treechildren = new Treechildren();// 如果没有tree
															// children那就添加tree
															// children,并将treeitem添加到treechildren下
			Treeitem treeitems = new Treeitem();
			addItem(treeitems, Str);// 回调,将tree row 添加到tree item下
			treechildren.appendChild(treeitems);// 将tree item添加到新增加的tree
												// children下
			treeitem.appendChild(treechildren);// 将tree item添加到tree children下
		} else {// 一个Tree children下可有多个tree item,当节点下有tree children时,那就直接在tree
				// children下添加tree item
			Treeitem treeitems = new Treeitem();
			addItem(treeitems, Str);// 回调,将tree row 添加到tree item下
			treeitem.getTreechildren().appendChild(treeitems);// 将tree item 添加到
																// 选择item 下的tree
																// children下
		}
	}

	/**
	 * 点击添加0层节点
	 */
	public void onClick$addRoot() {
		String cellNameStr = cellName.getValue();
		Treeitem treeitem = new Treeitem();
		// 创建一个单元格
		Treecell treecell = new Treecell(cellNameStr);
		Treerow treerow = new Treerow();
		// 将单元格设置成tree row的孩子,这里不能appendChild
		treecell.setParent(treerow);
		// 这里不能appendChild,因为一个item只能有一行,但可以有一个Tree children
		treerow.setParent(treeitem);
		// 在树的第一个孩子,就是Tree children下添加一个新的item
		tree.getFirstChild().appendChild(treeitem);
	}
}

 

前台页面 index.zul:

 

<?page title="手动添加树"?>
<window title="Hello World!!" border="normal" width="400px"
	height="400px"  apply="com.AddChild">
	<tree id="tree">
		<treechildren>
			<treeitem>
				<treerow>
					<treecell label="item1" />
				</treerow>
				<treechildren>
					<treeitem>
						<treerow>
							<treecell label="item2" />
						</treerow>
					</treeitem>
				</treechildren>
			</treeitem>
		</treechildren>
	</tree>
	<div>
	<textbox id="cellName"/>
	<button id="add" label="确认添加孩子节点"/>
	<button id="addRoot" label="确认添加0层节点"/>
	
	</div>

</window>

 

写的粗糙 多多指教

  • 大小: 20.4 KB
分享到:
评论
1 楼 freely 2010-12-09  
代码中有两个小小的BUG.这样的话不能完整显示树结构.
/**   
     * 在选择的节点下添加子节点   
     *    
     * @param treeitem   
     *            当前选择的节点   
     * @param Str   
     *            需要增加的节点名字   
     */   
    private void addItem(Treeitem treeitem, String Str) {   
        Treecell treecell = new Treecell(Str);   
        Treerow treerow = new Treerow();   
        treecell.setParent(treerow);// tree cell只能在 tree row里面   
        if (treeitem.getTreerow() == null) {// 一个tree item只能有一个Tree   
                                            // row,item下无row时首先添加一个row   
            treeitem.appendChild(treerow);  
             [color=red]addItem(treeitems, Str);// [/color] 
        } else if (treeitem.getTreechildren() == null) {// 一个tree   
                                                        // item只能有一个可选的Tree   
                                                        // children   
            Treechildren treechildren = new Treechildren();// 如果没有tree   
                                                            // children那就添加tree   
                                                            // children,并将treeitem添加到treechildren下   
            Treeitem treeitems = new Treeitem();  
          [color=red]treeitems.appendChild(treerow); [/color]            addItem(treeitems, Str);// 回调,将tree row 添加到tree item下   
            treechildren.appendChild(treeitems);// 将tree item添加到新增加的tree   
                                                // children下   
            treeitem.appendChild(treechildren);// 将tree item添加到tree children下   
        } else {// 一个Tree children下可有多个tree item,当节点下有tree children时,那就直接在tree   
                // children下添加tree item   
            Treeitem treeitems = new Treeitem();
[color=red]treeitems.appendChild(treerow); [/color]     
            addItem(treeitems, Str);// 回调,将tree row 添加到tree item下   
            treeitem.getTreechildren().appendChild(treeitems);// 将tree item 添加到   
                                                                // 选择item 下的tree   
                                                                // children下   
        }   
    }   

相关推荐

    zk目录树设计

    在描述中提到的“实现手动添加树的节点”,这意味着我们需要了解如何通过Zookeeper的API在目录树中动态地创建、更新和删除节点。这通常涉及以下步骤: 1. 连接Zookeeper:首先,我们需要通过Java或者其他支持的...

    ZK 框架整合的简单实例

    首先,由于ZK的jar包较大,为了引入ZK,我们需要手动下载并将其添加到项目的类路径中。这通常涉及到以下步骤: 1. 下载Zookeeper的最新稳定版本,可以从Apache官方网站获取。 2. 解压下载的zip文件,进入`lib`目录...

    ZK(AJAX开发工具)开发手册

    - 通过这个简单的例子,开发者可以快速了解ZK的基本用法,如如何定义页面、添加组件等。 ##### 交互性 - ZK通过AJAX技术实现了网页元素的动态交互。 - 开发者可以通过简单的脚本代码实现复杂的用户交互效果。 ####...

    一键安装伪分布式zk集群-solr集群脚本

    标题中的“一键安装伪分布式zk集群-solr集群脚本”指的是使用自动化脚本来部署Zookeeper集群和Solr集群,这种部署方式简化了传统手动安装的复杂过程,适合初学者和快速测试环境。Zookeeper是一个分布式协调服务,而...

    zookeeper可视化工具

    - **节点浏览**:显示Zookeeper的数据树结构,允许用户查看、添加、修改或删除节点。 - **数据编辑**:支持对节点数据的查看和编辑,包括JSON和文本格式的数据。 - **权限管理**:显示并编辑节点的ACL(访问控制列表...

    Zookeeper面试题 20道.pdf

    * PERSISTENT-持久节点,除非手动删除,否则节点一直存在于Zookeeper上 * EPHEMERAL-临时节点,临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与Zookeeper连接断开不一定会话失效),那么这个...

    springboot+dubbo+zk+mybatis框架搭建以及sql脚本

    Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给...

    Ansible-ansible-kafka.zip

    将 Kafka 集群中的所有节点添加到此文件,并根据它们的角色(如 broker、zk、producer 或 consumer)进行分组。 2. **安装依赖**:Ansible 可以通过 `apt`、`yum` 或其他包管理器安装 Kafka 和其依赖。例如,你可以...

    apache-zookeeper-3.6.1 (1).tar.gz

    配置文件中需要添加集群节点的地址,如 `server.1=ip1:port1:port2`,`server.2=ip2:port1:port2` 等。 ZooKeeper 提供的 API 支持 Java、C、Python 和 C++ 等多种语言,使得分布式应用能够方便地与 ZooKeeper 交互...

    ZooKeeper面试题(2022最新版)-重点.docx

    - **PERSISTENT (持久节点)**:除非手动删除,否则节点一直存在。 - **EPHEMERAL (临时节点)**:与客户端会话绑定,一旦客户端会话断开,节点将自动删除。 - **PERSISTENT_SEQUENTIAL (持久顺序节点)**:与持久节点...

    zookeeper-3.5.4windows服务注册包

    4. 如果需要服务自动启动,需要手动将其添加到Windows服务管理器。 而Zookeeper-3.5.4Windows服务注册包则简化了这一流程。用户只需解压后运行特定的安装脚本,就能将Zookeeper注册为Windows服务,无需手动管理进程...

    zookeeper安装教程

    - 在每个节点上通过执行`$ZOOKEEPER_HOME/bin/zkServer.sh start`命令来启动Zookeeper服务。 - 使用`zkServer.sh status`命令检查服务是否正常运行。 #### 四、注意事项 - **集群配置**:在配置`zoo.cfg`时,要...

    zookeeper-3.4.10.7z

    批量运行处理器的添加是这个压缩包的一大亮点,它允许用户一键运行所有的配置步骤,省去了手动设置环境变量和配置文件路径的麻烦。这极大地提高了部署效率,降低了出错的可能性,尤其对于初学者或运维人员来说,无疑...

    Hadoop实战培训教程(部署篇)_V3

    例如,在每个节点上添加以下内容: ```bash 192.168.65.61 centos61 192.168.65.62 centos62 192.168.65.63 centos63 192.168.65.64 centos64 ``` 这样做的目的是让每个节点都能够通过名称而不是IP地址访问其他...

    1000道 互联网Java工程师面试题 485页_PDF密码解除.pdf

    zk节点宕机如何处理?** - **故障检测:**通过心跳检测发现节点宕机。 - **自动恢复:**启动新的节点,或进行选举以恢复集群状态。 **18. zookeeper负载均衡和nginx负载均衡区别** - **Zookeeper负载均衡:**...

    zookeeper自动化安装脚本

    3. 配置环境变量:在`~/.bashrc`或`/etc/profile`中添加`export ZOOKEEPER_HOME=/path/to/zookeeper`,并使用`source`命令使改动生效。 4. 修改配置文件:编辑`conf/zoo.cfg`,设置数据存储目录(dataDir)和其他...

    1000道 互联网Java工程师面试题 485页

    #### 17、zk节点宕机如何处理? - **容错机制**:Zookeeper集群具有容错能力,当某个节点宕机时,其他节点继续提供服务。 - **选举新Leader**:如果Leader节点宕机,集群会重新选举新的Leader。 #### 18、...

    elastic-job-lite-master.zip

    3. **弹性扩容缩容**:系统动态添加或减少节点,任务能自动调整分布,无需手动干预。 4. **细粒度控制**:支持分钟级别、秒级别的定时任务配置,满足不同业务需求。 5. **丰富的API**:提供详尽的API接口,方便...

    apache-zookeeper-3.6.2-bin.tar.gz

    Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给...

Global site tag (gtag.js) - Google Analytics