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

此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>

 

 最后结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值