`

树型下拉框实现

    博客分类:
  • Java
阅读更多
代码参考:http://www.java2000.net/p944

public class SelectTree {
	// 编号
	private String id;

	// 标题
	private String title;

	// 下级列表
	private List<SelectTree> children = new ArrayList<SelectTree>();

	// 上级,顶层为null
	private SelectTree parent;

	// 前一个节点
	private SelectTree prev;

	// 后一个节点
	private SelectTree next;

	// 当前处理的节点
	private SelectTree current;

	/**
	 * 默认的构造器
	 */
	public SelectTree() {
	}

	/**
	 * 推荐使用的构造器
	 * 
	 * @param id
	 *            编号
	 * @param title
	 *            文本
	 */
	public SelectTree(String id, String title) {
		this.id = id;
		this.title = title;
	}

	/**
	 * 增加一个下属。
	 * 
	 * 自动对应上级和兄弟结点
	 * 
	 * @param f
	 *            被增加的节点
	 */
	public void addChild(SelectTree f) {
		children.add(f);
		f.setParent(this);
		if (current != null) {
			current.next = f;
		}
		f.prev = current;
		current = f;
	}

	/**
	 * 输出为下拉列表的方法
	 * 
	 * @param selectedId
	 *            被选中的编号
	 * @return 下拉列表的字符串。可以直接放到<select></select>里面
	 */
	public String getOption(String selectedId) {
		return "<option value=''>" + toStringOption("", "", selectedId);
	}

	/**
	 * 输出为Text的方法。
	 * 
	 * @param lftStr
	 *            左侧额外的字符串
	 * @param append
	 *            右侧显示的字符串
	 * @return 文本形式的字符串
	 */
	public String toStringText(String lftStr, String append) {
		StringBuilder b = new StringBuilder();
		b.append(append + title);
		b.append("\n");
		if (children.size() > 0) {
			for (int i = 0; i < children.size() - 1; i++) {
				b.append(lftStr
						+ children.get(i).toStringText(lftStr + "│", "├"));
			}
			b.append(lftStr
					+ children.get(children.size() - 1).toStringText(
							lftStr + " ", "└"));
		}
		return b.toString();
	}

	public static void main(String[] args) {
		 	 		f1_1_1.addChild(f1_1_1_1);
		SelectTree f1_1_1_2 = new SelectTree("1112",
				"娱乐2");
		f1_1_1.addChild(f1_1_1_2);
		SelectTree f1_2 = new SelectTree("12", "辅助工具");
		f1.addChild(f1_2);
		SelectTree f2 = new SelectTree("2",
				"My Documents ");
		root.addChild(f2);
		SelectTree f3 = new SelectTree("3",
				"My Documents2 ");
		SelectTree f5 = new SelectTree("5",
		"My Documents5 ");
		SelectTree f6 = new SelectTree("6",
		"My Documents6 ");
		f5.addChild(f6);
		f3.addChild(f5);
		root.addChild(f3);
		System.out.println(root.toStringText(" ", ""));
		System.out.println(root.getOption("0"));
		System.out.println(f1_1_1_2.getPrev().getTitle());
		System.out.println(f1_1_1_2.getPrev().getParent().getTitle());
	}

	public List<SelectTree> getChildren() {
		return children;
	}

	public String getId() {
		return id;
	}

	/**
	 * 得到下一个兄弟结点。
	 * 
	 * @return 如果是最后一个,则返回null
	 */
	public SelectTree getNext() {
		return next;
	}

	public SelectTree getParent() {
		return parent;
	}

	/**
	 * 得到前一个兄弟结点。
	 * 
	 * @return 如果是第一个,则返回null
	 */
	public SelectTree getPrev() {
		return prev;
	}

	public String getTitle() {
		return title;
	}

	public void setId(String id) {
		this.id = id;
	}

	public void setNext(SelectTree next) {
		this.next = next;
	}

	public void setParent(SelectTree parent) {
		this.parent = parent;
	}

	public void setPrev(SelectTree prev) {
		this.prev = prev;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	/**
	 * 构造下拉列表.
	 * 
	 * @param lftStr
	 *            左侧的字符
	 * @param append
	 *            增加的字符
	 * @param idSelected
	 *            被选中的编号
	 * @return 下拉列表字符串
	 */
	private String toStringOption(String lftStr, String append, String idSelected) {
		StringBuilder b = new StringBuilder();
		b.append(append + title + "</option>");
		b.append("\n");
		if (children.size() > 0) {
			for (int i = 0; i < children.size() - 1; i++) {
				b.append("<option value='"
						+ children.get(i).getId()
						+ "'"
						+ (idSelected.equals(children.get(i).getId()) ? " selected"
								: "")
						+ ">"
						+ lftStr
						+ children.get(i).toStringOption(lftStr + "│", "├",
								idSelected));
			}
			b.append("<option value='"
							+ children.get(children.size() - 1).getId()
							+ "'"
							+ (idSelected.equals(children.get(children.size() - 1).getId()) ? " selected" : "")
							+ ">"
							+ lftStr
							+ children.get(children.size() - 1).toStringOption(
									lftStr + "&nbsp;", "└", idSelected));
		}
		return b.toString();
	}
}


  Action:
	public String rNavFind() {
		// 根节点
		SelectTree root = new SelectTree("0", "权限列表");
              //service递归产生节点
		rbacService.getCoreFuncsByPid(root, "0");
		coreFuncsOptionStr = root.getOption(coreTree.getFunc_id());
		
		coreTree = this.rbacService.findTreeById(id);
		hasChildren = this.treeNodeService.hasChildren(id);

		return "edit";
	}


 Service:
	public void getCoreFuncsByPid(SelectTree currentSelectTree,
			String pid) {
		List<CoreFunc> list = this.rbacDao.getCoreFuncsByPid(pid);
		SelectTree selectTree;
		int cnt = 0;
		for (CoreFunc cf : list) {
			selectTree = new SelectTree(cf.getId(), cf.getName());
			currentSelectTree.addChild(selectTree);
			cnt = this.rbacDao.getChildrenCountByPid(cf.getId());
			if (cnt == 0) {
				continue;
			} else {
				getCoreFuncsByPid(selectTree, selectTree.getId());
			}
		}
	}

 JSP:
   <select name="funcId">						        
     <s:property value="coreFuncsOptionStr" escape="false" />
   </select>
分享到:
评论

相关推荐

    asp.net 树型下拉框 (用户自定义控件)

    本文将详细讲解如何创建和使用asp.net树型下拉框,以及相关的实现技巧。 首先,要实现树型下拉框,我们需要创建一个自定义用户控件(User Control)。在ASP.NET中,自定义用户控件允许我们封装和重用复杂的UI逻辑。...

    Element input树型下拉框的实现代码

    ### 树型下拉框实现原理 1. **交互逻辑:** 实现树型下拉框的核心在于,当用户输入框(input)获得焦点时,下拉框(el-tree)显示出来,用户可以在这个树型结构中选择所需的数据项。当用户再次点击下拉框或者在其他...

    javascript实现的树型下拉框改进版

    2. 树型下拉框实现方式:在最初的实现中,存在数据顺序颠倒导致的问题。针对这一问题,改进版的树型下拉框通过一种特定的算法,先加载根节点,然后再递归地加载每个根节点的子节点。算法工作原理如下: - 首先,按...

    bootstrap树形下拉框 下拉框树形菜单

    而Bootstrap Treeview.js是一个专门用于创建树形结构的JavaScript库,它可以轻松地集成到Bootstrap环境中,实现下拉框中的树形菜单。 首先,要实现Bootstrap树形下拉框,你需要包含以下关键文件: 1. Bootstrap CSS...

    C#编写的一个带树型结构的下拉框控件

    在传统的下拉框(ComboBox)中,用户只能看到一个单一的列表,而“带树型结构的下拉框控件”则允许用户在展开控件时看到一个层次结构,这特别适用于表示具有分层关系的数据,如组织结构、文件系统或者分类目录。...

    JS 下拉框树型控件.rar

    2. **JavaScript 事件监听**:通过JavaScript,我们需要监听图标或文本框的点击事件,当用户点击图标时,树型下拉框应该显现。这可以通过`addEventListener`函数实现,绑定`click`事件并调用相应的处理函数。 3. **...

    ext js 下拉树

    实现Ext JS下拉树的关键在于正确配置`Ext.form.field.Tree`组件。以下是一些核心配置项的详细解释: 1. **store**:下拉树的数据源,通常是一个`Ext.data.TreeStore`实例,它管理着树结构中的节点数据。你需要定义...

    Extjs中ComboBoxTree实现的下拉框树效果(自写)

    在案例中,`Ext.ux.TreeCombo` 是基于 `Ext.form.ComboBox` 进行扩展的,目的是实现一个包含树形结构的下拉框。 2. **Ext.ux.TreeCombo**: 这是一个自定义组件,它结合了ComboBox和TreePanel的特性。它继承了...

    zTree实现多选下拉框

    "zTree实现多选下拉框"这个主题聚焦于如何利用zTree这款JavaScript库来创建一个支持多选功能的下拉框控件。zTree是一款强大的树形插件,广泛应用于网页中展示层次结构数据,如组织结构、文件目录等。本文将详细介绍...

    bootstrap树形下拉框 下拉框树形菜单(花了一小时修改过的)

    这个组件是基于流行的前端框架Bootstrap和JavaScript库构建的,使得在网页设计中实现树形下拉框变得简单高效。 在Bootstrap中,树形下拉框主要依赖于`bootstrap-treeview.js`这个JavaScript插件,它扩展了Bootstrap...

    c# 下拉框多选实例

    不过,通过自定义控件,我们可以实现下拉框的多选功能。这里将详细讲解如何实现这一功能,以及如何结合其他UI元素,如复选框和树型视图。 首先,让我们关注“ComboBox和复选框组合”的实现。这通常涉及到创建一个...

    layui组件之树形下拉框

    1. **基本原理**:树形下拉框是将传统的下拉框与ZTree(一个JavaScript实现的树形插件)结合,当用户点击下拉按钮时,会展开一个包含层级结构数据的列表供用户选择。 2. **ZTree介绍**:ZTree是一个基于jQuery的树...

    bootstrap select树形下拉框

    在HTML中,下拉框通常使用`&lt;select&gt;`标签创建,而树形结构则需要通过JavaScript库如jQuery或者更专业的UI库如jQuery UI或AngularJS来实现。Bootstrap Select通过插件的形式将这两者融合,使得在网页中可以方便地创建...

    WPF 下拉框树状通用控件

    下面将详细介绍WPF下拉框树状通用控件的设计原理、实现方法以及如何在项目中应用。 首先,WPF下拉框树状控件通常由两个主要部分组成:一个文本框和一个下拉列表。文本框显示当前选中的项,而下拉列表则显示可选的树...

    结合ztree的下拉框树形结构数据多选,单选

    在网页设计中,下拉框(Dropdown)是一种节省空间且易于使用的表单元素,它允许用户从预定义的选项中进行选择。在这里,下拉框被扩展为一个树形结构,这意味着当用户点击下拉按钮时,会展示一个包含层级关系的数据...

Global site tag (gtag.js) - Google Analytics