ExtJs通过后台动态创建树

ExtJs动态创建树的方法是:当树的TreeStore要加载的时候,通过ajax请求后台数据,根据后台返回数据动态加载树结构。

正常情况下我们定义TreeStore是这样定义的:

	var tree = Ext.create('Ext.data.TreeStore', {
		root : {
			expanded : true,
			children : [ {
				text : "操作",
				id : "operator",
				expanded : true,
				children : [
				    {text : "第一个叶子",leaf : true,id : "termOpera"},
				    {text : "第二个叶子",leaf : true,id : "userMang"},
				    {text : "第三个叶子",leaf : true,id : "importExcel"}
				]
			} ]
		}
	});

这样是直接定义好树结构,我们看一个树的节点有以下属性:text(显示文本)、leaf、id……属性。

现在如果需要动态加载树形结构就需要通过ajax请求后台数据。这里我们看一下如何定义TreeStore

	var tree_store = Ext.create('Ext.data.TreeStore', {
	    id:'tree_store',
	    proxy: {
	        type: 'ajax',
	        url: 'tree_load',
	        reader:{
	        	root:'nodelist',
		    	type:'json'
		    }
	    },
	    fields : [
	    	{name:'text'},
	    	{name:'id'},
	    	{name:'leaf'},
	    ]
	});

这样就定义了ajax请求后台数据加载这个TreeStore,这样在初始加载的时候就会请求url--tree_load,并且传入根节点的id,如果树中某个节点不是叶子节点,那么在点击展开该节点时候会也会传入该节点的id。

这里我们同过Struts2拦截请求,并对请求处理,首先在后台定义一个Node类,这是一个纯javaBean。有id、text、leaf属性。

public class Node {
	private String text;
	private String id;
	private boolean leaf;

	public Node(){

	}
	public Node(String text,String id,boolean leaf){
		this.text = text;
		this.id = id;
		this.leaf = leaf;
	}

	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public boolean isLeaf() {
		return leaf;
	}
	public void setLeaf(boolean leaf) {
		this.leaf = leaf;
	}

}

然后我们看处理该请求的Action类

public class BaseAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private String id;
	private ArrayList<Node> nodelist;

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public ArrayList<Node> getNodelist() {
		return nodelist;
	}
	public void setNodelist(ArrayList<Node> nodelist) {
		this.nodelist = nodelist;
	}

	private NodeService ns = new NodeService();

	public String treeload(){
		System.out.println(id);
		nodelist = ns.getTree(id);
		return SUCCESS;
	}
}

id属性用于接收点击展开节点的id,nodelist是返回结果,是Node类的集合。

这里我们在后台直接新建对象方式进行模拟,对于获取Node的方式可以从数据库中获取数据。

public class NodeService {
	//这里做测试,后期节点信息需要从数据库中存取
	public ArrayList<Node> getTree(String id){
		ArrayList<Node> arr = new ArrayList<Node>();
		if("root".equals(id)){
			Node node = new Node("监控主机1","one", "one", false,null);
			Node node2 = new Node("监控主机2","second", "second", false,null);
			arr.add(node);
			arr.add(node2);
		}else{
			Node mode = new Node("连接检测", null,"link", true,id);
			Node mode1 = new Node("系统检测",null,"system", true,id);
			Node mode3 = new Node("硬盘检测", null,"disk", true,id);
			Node mode4 = new Node("应用检测", null,"app", true,id);
			Node mode5 = new Node("数据库检测",null,"db", true,id);
			Node mode6 = new Node("备份检测", null,"bak", true,id);
			Node mode7 = new Node("流量检测", null,"netcard", true,id);
			arr.add(mode);
			arr.add(mode1);
			arr.add(mode3);
			arr.add(mode4);
			arr.add(mode5);
			arr.add(mode6);
			arr.add(mode7);
		}
		return arr;
	}
}

下面看运行效果

时间: 2024-10-10 14:33:00

ExtJs通过后台动态创建树的相关文章

ExtJs+JSP构造动态树

在实际生产中树的构造是需要根据后台数据库中存放的内容动态加载的,例如一个系统中,不同的角色有不同的权限,他们所能进行的操作也是不同的,如果需要构造一个树形结构展现某个角色所能进行的操作,这就用到了树形结构. ExtJs提供了动态加载树形结构的机制,这里就用到了TreeStore动态加载,常用的动态加载数据格式有JSON和XML. 这里我们看一下如何使用JSON格式数据动态加载属性结构. 首先看一下建立的TreeStore. var tree_store = Ext.create('Ext.dat

ExtJs 4.0 动态生成Grid

每写一篇文章都是一部血泪史啊.最近公司的需求要是使用到Ext的动态生成Grid,公司用的是4.0,由于版本问题在网上找了很多都不实用,所以自己研究了下. 现在给大家分享出来. 后台Json: callback内容: 1 callback : function(options, success, response) { 2 alert(response.responseText); 3 var r = Ext.decode(response.responseText); 4 if ("3"

后台动态生成静态select标签的option项

以下为代码示例: <select id="Category_<%#Eval("BTUserID") %>" name="Category_<%#Eval("BTUserID") %>" disabled on onchange=setHourlyCost("<%#Eval("BTUserID") %>") style="width:20

创建树 - #号法

#创建树,让树的每一个节点都变成度数为2的树 通过先序遍历124###3##可以唯一确定一棵树. // nonrecursion.cpp // 对树的操作 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <stack> using namespace std; // 二叉树表示法 typedef struct BiTNode { int data; struct

C#后台动态添加Grid表格

前面页面: 1 <ScrollViewer x:Name="sv_data" Grid.Row="1" BorderBrush="#25A0DA" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 2 3 <Grid x:Name="rgv_schedule" Backgro

在MVC中使用dotless后台动态解析LESSCSS的学习笔记

通过学习LessCSS,我们知道,Less是需要通过编译才能生成 .css 文件,主要使用三种方式进行编译: 1)使用第三方编译工具,在项目发布前编译好放在项目中. 2)在浏览器端解析执行,需要引用 less.js . 3)使用第三方程序集在后台动态解析,例如:在.net平台下的dotless. 这篇随笔记录了如何在.net MVC项目中使用dotless动态解析less. 具体实现 1.创建MVC4 Web的基本项目 在 Content 文件夹中添加 lesses 文件夹,并在该文件夹下添加自

Windows Server 2012(单林、多树、多站点)AD 部署系列(五)创建树域

本章博文开始在BJ.SH.GZ站点为林bicionline.org 创建树域控及调配的相关DNS等功能. 网络配置: 1.为BJ站点ds04.SH站点pdc02和GZ站点ad02配置网络, IP配置分别如下:(注:在创建域树环境时,确保加入域树环境的计算机网络dns地址指向建立林时的第一台域控制器DNS地址 ) ds04:172.16.10.104 ,子网掩码:255.255.255.0 网关:172.16.10.254 ,DNS 172.16.10.100 , ad02:172.16.29.1

树和森林v2.0 层次非递归创建树和森林,森林中的树不连

#include <iostream> #include"queue.h"//之前写的类 #include"stack.h" //之前写的类 using namespace std; /* 用二叉树的方式实现 root指针指向第一棵树的根节点 */ template <class T> class Forest; //======================================== // 森林节点类声明 template &l

.NET Web后台动态加载Css、JS 文件,换肤方案

后台动态加载文件代码: //假设css文件:TestCss.css #region 动态加载css文件 public void AddCss() { HtmlGenericControl _CssFile = new HtmlGenericControl("link"); _CssFile.ID = "CssFile"; _CssFile.Attributes["rel"] = "stylesheet"; _CssFile.A