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

EXT 动态加载部门及员工的TREE

    博客分类:
  • Ext
阅读更多

此DEMO 建立在 Struts +Hibernate

建立2张表 person ,department

department 

 

 

 

定义2个类 person.java ,department.java

建立person.hbm.xml , department.hbm.xml

 

department.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.bkx.oa.vo.Department" table="department" catalog="bkxoa">
        <id name="deptid" type="java.lang.Integer">
            <column name="deptid" />
            <generator class="native"></generator>
        </id>
        <property name="dparentid" type="java.lang.Integer">
            <column name="dparentid" />
        </property>
        <property name="dleaf" type="java.lang.Integer">
            <column name="dleaf" />
        </property>
        <property name="dchild" type="java.lang.Integer">
            <column name="dchild" />
        </property>
        <property name="dname" type="java.lang.String">
            <column name="dname" length="32" />
        </property>
        <property name="dloc" type="java.lang.String">
            <column name="dloc" length="32" />
        </property>
        <property name="dbusiness" type="java.lang.String">
            <column name="dbusiness" length="32" />
        </property>
        <set name="persons" inverse="true" cascade="all" lazy="false">
        	<key>
        		<column name="deptid" />
        	</key>
        	<one-to-many class="com.bkx.oa.vo.Person" />
        </set>
    </class>
</hibernate-mapping>

 

 person

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.bkx.oa.vo.Person" table="person" catalog="bkxoa">
        <id name="pid" type="java.lang.String">
            <column name="pid" length="32" />
            <generator class="assigned"></generator>
        </id>
        <many-to-one name="department" class="com.bkx.oa.vo.Department">
            <column name="deptid" />
        </many-to-one>
        <property name="pname" type="java.lang.String">
            <column name="pname" length="32" />
        </property>
        <property name="page" type="java.lang.Integer">
            <column name="page" />
        </property>
        <property name="psex" type="java.lang.String">
            <column name="psex" length="4" />
        </property>
    </class>
</hibernate-mapping>

 

 

 

 建立一个Action OrgTreeJsonDataAction

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.bkx.oa.struts.action;

import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.bkx.oa.factory.DaoFactory;
import com.bkx.oa.vo.Department;
import com.bkx.oa.vo.Person;

/** 
 * MyEclipse Struts
 * Creation date: 11-01-2008
 * 
 * XDoclet definition:
 * @struts.action validate="true"
 */
public class OrgTreeJsonDataAction extends Action {
	/*
	 * Generated Methods
	 */

	/** 
	 * Method execute
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return ActionForward
	 */
	private String JosnString;
	private String person;
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		int parentid = Integer.parseInt(request.getParameter("parentid"));
		try {
			if(parentid==-100){
				parentid=0;
			}
			List<Department> list = DaoFactory.getDepartmentInstance().queryByDeptid(parentid);
			Iterator<Department> iter = list.iterator();
			if (list != null && !list.isEmpty()) {
				int i = 0;
				int last = list.size();
				String person = "";
				while (iter.hasNext()) {
					Department de = new Department();
					de = iter.next();
					if(de.getPersons().size()>0){
						person=" ,"+this.getPersonname(de.getPersons());
					}
					//如果只有一行
					if(last==1){
						this.setJosnString("[{\"text\" :\""
								+ de.getDname().toString()
								+ "\" ,\"id\" :\"" + de.getDeptid()
								+ "\" ,\"cls\" :\"folder\"" +
								person+		"}] ");
					//如果有多行显示第一行
					}else if (i == 0) {
						this.setJosnString("[{\"text\" :\""
								+ de.getDname().toString()
								+ "\" ,\"id\" :\"" + de.getDeptid()
								+ "\" ,\"cls\" :\"folder\"" +
								person+		"} ");
					//判断是不是最后一行	
					} else if (i == (last - 1)) {

						this.setJosnString(this.getJosnString()
								+ ",{\"text\" :\""
								+ de.getDname().toString()
								+ "\" ,\"id\" :\""
								+ de.getDeptid() + "\" ,\"cls\" :\"folder\"" +
								person+		"}]");
					//显示中间部分	
					} else {

						this.setJosnString(this.getJosnString()
								+ ",{\"text\" :\""
								+ de.getDname().toString()
								+ "\" ,\"id\" :\""

								+ de.getDeptid() + "\" ,\"cls\" :\"folder\"" +
								person+		"}");
					}

					i++;

				}

			} else {

				this.setJosnString("");

			}
			
			//System.out.print(this.getJosnString());

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.print(this.getJosnString());
		request.setAttribute("treenote", this.getJosnString());
		return mapping.findForward("tree");
	}
	public String getPersonname(Set<Person> p){
		this.setPerson(" ");
		if(p!=null&& !p.isEmpty()){
			Iterator<Person> iter = p.iterator();
			int i=0;
			int last = p.size();
			while(iter.hasNext()){
				Person person = new Person();
				person =iter.next();
				if(last==1){
					this.setPerson(this.getPerson()+"\"children\" :[{\"text\" :\""+person.getPname()+"\" ,\"id\" :\""+person.getPid()+"\" ,\"leaf\" :\"true\"}] ");
				}else if(i==0){
					this.setPerson(this.getPerson()+"\"children\" :[{\"text\" :\""+person.getPname()+"\" ,\"id\" :\""+person.getPid()+"\" ,\"leaf\" :\"true\"}");
				}else if(i==last-1){
					this.setPerson(this.getPerson()+",{\"text\" :\""+person.getPname()+"\" ,\"id\" :\""+person.getPid()+"\" ,\"leaf\" :\"true\"}] ");
				}else {
					this.setPerson(this.getPerson()+",{\"text\" :\""+person.getPname()+"\" ,\"id\" :\""+person.getPid()+"\" ,\"leaf\" :\"true\"}");
				}
				i++;
			}
		}else{
			this.setPerson("");
		}
		return this.getPerson();
	}
	
	
	public String getJosnString() {
		return JosnString;
	}
	public void setJosnString(String josnString) {
		JosnString = josnString;
	}
	public String getPerson() {
		return person;
	}
	public void setPerson(String person) {
		this.person = person;
	}
}

 

 

建立一个JS文件

Ext.onReady(function() {

      var Tree = Ext.tree;

      var tree = new Tree.TreePanel( {

            el : 'tree-div',//目标div容器

            autoScroll : true,

            animate : true,

            enableDD : true,

            containerScroll : true,

            loader : new Tree.TreeLoader( {

                  dataUrl : 'orgTreeJsonData.do'// OrgTreeJsonData.action就是要动态载入数据的请求地址,这里请求时会提交一个参数为node的值,值为root即new Tree.AsyncTreeNode()对象的id值

            })

      });

      var root = new Tree.AsyncTreeNode( {

            text : '组织机构树',

            draggable : false,

            id : '-100'//默认的node值:?node=-100

      });


      tree.setRootNode(root);
	  tree.on('beforeload', function(node){    
      tree.loader.dataUrl = 'orgTreeJsonData.do?parentid='+node.id;    
      }); 
	   tree.setRootNode(root);
	   //为树上的节点添加事件
	   tree.on('click',function(node){
		 Ext.Msg.alert('             您点击的是:           ',node.text);
	   });

      tree.render();

      root.expand();
	
});

 Struts-config.xml

 

建立一个HTML页面

<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
	<link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" />
    <script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="ext/js/ext-all.js"></script>
	<script type="text/javascript" src="org.js"></script>
 </HEAD>

 <BODY>

 <div id="tree-div" style="overflow:auto; height:350px;width:300px;border:2px solid #c3daf9;"></div> 

 </BODY>


</HTML>

 

 最后结果

分享到:
评论

相关推荐

    Ext tree json 动态加载完美实例

    在本文中,我们将深入探讨如何使用Ext JS的Tree Panel与JSON数据进行动态加载,并实现多选和单选功能。Ext JS是一种强大的JavaScript库,用于构建富客户端应用,而Tree Panel则是展示层次结构数据的一种组件。在后台...

    Ext-tree加载

    Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载Ext-tree加载

    EXT tree 使用 实例 最新

    EXT Tree提供了丰富的功能,包括节点的动态加载、拖放操作、节点选择以及自定义图标和样式。 在EXT Tree的使用实例中,我们通常会涉及到以下几个关键知识点: 1. **配置项与属性**:EXT Tree允许通过配置项定制其...

    Ext 动态加载表单数据

    在Ext JS这个强大的JavaScript框架中,动态加载表单数据是一种常见的功能需求,特别是在构建数据驱动的应用程序时。本文将深入探讨如何使用JSON格式的数据来实现这一功能,以便于灵活地更新和显示表单内容。 首先,...

    ext TREE

    EXT JS Tree组件提供了丰富的功能,包括拖放操作、节点的展开与折叠、异步加载数据以及自定义图标和样式。它支持JSON和XML格式的数据源,并可以通过Ajax请求动态加载子节点,优化了大数据量时的性能。开发者还可以...

    DWR方式动态加载EXT.Tree

    当我们谈论“DWR方式动态加载EXT TreePanel”时,意味着我们需要使用DWR来获取服务器端的数据,并将其动态地填充到EXT TreePanel中,以实现数据的实时更新和交互性。这种技术的应用场景可能包括:当用户需要查看或...

    extjs中Ext.Panel和TreePanel 组件动态加载本地页面数据

    动态加载本地数据到`Ext.Panel`通常涉及到异步请求,使用`Ajax`或`Store`的`load`方法,通过URL获取JSON或XML格式的数据,并将其渲染到面板内。 例如: ```javascript var panel = Ext.create('Ext.Panel', { ...

    Ext.ux.tree.treegrid异步加载

    本文详细介绍了如何使用ExtJS中的`Ext.ux.tree.TreeGrid`组件实现异步加载功能,包括前端配置和后端数据处理两个方面。通过这种方式可以有效提升用户体验,同时减轻服务器的压力。在实际开发过程中,还需要根据具体...

    ext4 四种常见的tree

    3. **动态加载节点**:这种tree设计适用于大型数据集,每个父节点只在展开时才向服务器请求其子节点的数据。这样可以显著减少初始加载时间,提高用户体验。每次展开节点时,后台需要能够快速响应并返回相应的子节点...

    ext grid tree 应用

    综上所述,"ext grid tree 应用"展示了EXT JS在构建动态、交互式Web应用程序的强大能力,包括数据展示、数据管理、用户交互以及个性化设置等多个方面。通过学习和理解这些知识点,开发者可以更好地利用EXT JS创建...

    Ext4 动态加载js例子

    `Ext.Loader` 是 Ext4 中的一个核心特性,用于动态加载所需的 JavaScript 类库和模块,这在开发大型应用时尤其有用,因为它可以显著减少页面初次加载时的资源需求。 动态加载的核心在于按需加载,即只有在实际需要...

    Ext.tree.TreeLoader附带封装的json类

    `Ext.tree.TreeLoader`是Ext JS库中的一个组件,它负责加载和解析树形结构的数据,而JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,非常适合于在服务器和客户端之间传输数据。我们将通过实例...

    oa.rar_ext_ext java oa_ext oa_ext tree_java ext tree

    将EXT Tree与SSH2结合,意味着开发者可能通过Java后端服务获取数据,并用EXT Tree在前端展示,同时实现动态加载、异步更新等功能。 在实际操作中,这个项目可能包含以下步骤: 1. 配置SSH2环境:设置Struts配置...

    JSP EXT 遍历 TREE

    EXT的TREE组件通常与JSON数据源配合使用,通过异步加载或者一次性加载所有数据来构建树结构。这个文件可能包含了节点ID、父节点ID、节点文本等信息,EXT的`TreeStore`会解析这个JSON数据并填充到TREE中。 最后,...

    Ext 带多选的Tree

    6. **数据加载与渲染**:EXT JS的Tree组件通常与后端服务进行交互,通过`store`加载树数据。在`TreeCheckNode.js`中,我们可能会看到如何定义`store`以及如何将JSON数据转化为Tree节点的数据模型。 综上所述,"Ext ...

    自己写的一个动态从后台数据库加载Ext.tree的json数据工具类

    这个工具类的核心功能是获取JSON格式的数据,并将其动态加载到Ext.tree中。 首先,我们需要了解Ext.tree的基本概念。Ext.tree是ExtJS库中的一个组件,它提供了一个可交互的树形视图,允许用户展开、折叠节点以及...

    ext-tree.rar_ext_ext tr_ext tre_ext.tr_ext.tree

    【标题】"ext-tree.rar_ext_ext tr_ext tre_ext.tr_ext.tree" 暗示这是一个关于Ext JS库中TreePanel组件的实例,其中可能包含了用于创建和管理数据结构的树形视图,以及与数据库交互的功能。 【描述】"ext的树的...

    EXT4.3实现动态表单全动态

    - **分页与加载更多**:EXT4.3 grid支持分页,通过`pagingToolbar`配置实现,同时可以设置`loadMore`功能,以便在需要时动态加载更多数据。 3. **表单与grid的结合**: - **联动交互**:在EXT4.3中,表单和grid...

    Ext.Tree.Panel

    总结,`Ext.Tree.Panel`是EXT JS中构建交互式树形结构的关键组件,通过配置和事件处理可以实现各种复杂的功能,如动态加载数据、拖放操作、自定义样式等。在实际应用中,开发者可以根据需求进行灵活定制,以满足不同...

Global site tag (gtag.js) - Google Analytics