论坛首页 Web前端技术论坛

EXT2.0 checkbox树的扩展(支持单选,级联多选,只选叶子等)

浏览 82936 次
精华帖 (6) :: 良好帖 (18) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-17  
我的树已经实现了复选框,现在我在做权限管理
一张表A用来维护树的所有节点,另外一张表B用来记录用户所拥有的权限(也就是这个用户对应的树的节点)
我想在页面初始化的时候,自动将用户有权限的节点自动打勾,而没有权限的节点也要显示,但不打勾,请问具体该怎么做?
期待楼主能够指点一下,我搞了两天了,实在郁闷!希望您不辞辛苦,能给个简单的实例吧,万分感激!


/*************定义一个树形面板,显示权限复选树****************/	
	var tree = new Ext.tree.TreePanel({   
		columnWidth : 0.45,
		width : 100,
        height : 500,
	    id : 'member-tree',
		name : 'userteampowertree',
		title : '可授权子系统、子模块、子窗口树形图',
	    border : true,
		stripeRows : true,
		frame : true,
		checkModel : 'cascade',
		onlyLeafCheckable : false,
		animate : false,
		rootVisible : false,
		autoScroll : true,
		lines : false,
		loader : new Ext.tree.TreeLoader({
		         dataUrl : '/rsgl/yonghuzuquanxiandata.jsp',
		         baseAttrs : {
			           uiProvider : Ext.ux.TreeCheckNodeUI
		         }
		}),
		root : new Ext.tree.AsyncTreeNode({
		       id : '0',
			   text : '用户组权限管理'
		}),
		listeners : {
			   click : treeshowinfo
		}
	});
	// ---------------定义一个树形面板,显示权限复选树(结束)-----------------//

上面是我的js树部分,下面是数据源,写的很烂,还希望大家能够帮忙改善
<%@ page contentType="text/html; charset=gb2312" language="java"%>
<%@ page import="java.sql.*"%>
<%

  String   DBriver   =   "com.mysql.jdbc.Driver";   
  String   url   =   "jdbc:mysql://localhost/rsgl";   
  String   user   =   "root";   
  String   pwd   =   "openlab2008";   
try{   
  Class.forName(DBriver);   
  }catch(java.lang.ClassNotFoundException   e){   
  System.err.println(e.getMessage());   
  System.out.println("MYSQL驱动找不到。。。");   
  }   
try{   
  Connection   con   =   DriverManager.getConnection(url,user,pwd);   
  Statement   stmt   =   con.createStatement();   
  ResultSet   rs   =   stmt.executeQuery("select   *   from   ctlm01");  
 // rs查找子系统
  String json = "[";
    if(rs.next()){
        json += "{id:"+rs.getString(1)+",text:" +"'"+ rs.getString(2)+"'"; 
             System.out.print(json);
             System.out.println("第1个断点,\n"); 
             Statement   stmt1   =   con.createStatement(); 
             ResultSet rs1=stmt1.executeQuery("select   *   from   ctlm02 where sbs_id="+rs.getString(1));
             //rs1查找子模块
           
             if(rs1.next()){
                json+=",children: ["+"{id:"+rs1.getString(2)+",text:" +"'"+ rs1.getString(3)+"'";
                System.out.print(json);
                System.out.println("第2个断点,\n");
                Statement stmthd = con.createStatement();
                ResultSet rshd = stmthd.executeQuery("Select * from ctlm03 where mod_id="+rs1.getString(2));
                //rshd查找子模块1的所有子窗口
               
                if(rshd.next()){
                   json += ",children:["+"{id:"+rshd.getString(2)+",text:"+"'"+rshd.getString(3)+"',leaf:true}";
                   System.out.print(json);
                   System.out.println("第3个断点,\n");
                   while(rshd.next()){
                         json += ",{id:"+rshd.getString(2)+",text:"+"'"+rshd.getString(3)+"',leaf:true}";
                         System.out.print(json);
                         System.out.println("第3个断点,\n");
                   }
                   json +="]";
                }
                json +="}";
                //子模块1的子窗口查找结束
                while(rs1.next()){
                     json +=","+"{id:"+rs1.getString(2)+",text:" +"'"+ rs1.getString(3)+"'";
                     Statement stmthd1 = con.createStatement();
                     ResultSet rshd1 = stmthd1.executeQuery("Select * from ctlm03 where mod_id="+rs1.getString(2));
                     //rshd1查找其他每个子模块的所有子窗口
                     //////////
                      if(rshd1.next()){
                         json += ",children:["+"{id:"+rshd1.getString(2)+",text:"+"'"+rshd1.getString(3)+"',leaf:true}";
                         System.out.print(json);
                         System.out.println("第3个断点,\n");
                         while(rshd1.next()){
                            json += ",{id:"+rshd1.getString(2)+",text:"+"'"+rshd1.getString(3)+"',leaf:true}";
                            System.out.print(json);
                            System.out.println("第3个断点,\n");
                         }//其他子模块的子窗口查找结束
                     json +="]";
                }
                json +="}";
                //子系统1的子模块查找结束
                     ////////////
                     
                System.out.print(json);
                System.out.println("第3个断点,\n");
                } 
                json += "]";
             } 
             System.out.print(json);
             System.out.println("第3个断点,\n"); 
             json +="}";  
             //[{id:1,test:fds,children
             System.out.print(json);
             System.out.println("第4个断点,\n"); 
             //[  { id:1,
             //     text:子系统1,
             //     children:[  {id:11,text:子系统1子模块1,
             //                  children:[  { id:111,text:系统1模块1窗口1,leaf:ture},
             //                              { id:112,text:系统1模块1窗口2,leaf:true}
             //                           ]
             //                 },
             //                 {id:12,text:子系统1子模块2,
             
             
             
        while(rs.next()){
             json +=","+"{id:"+rs.getString(1)+",text:" +"'"+ rs.getString(2)+"'";
             System.out.print(json);
             System.out.println("第5个断点,\n"); 
             Statement   stmt2   =   con.createStatement(); 
             ResultSet rs2=stmt2.executeQuery("select   *   from   ctlm02 where sbs_id="+rs.getString(1));
             if(rs2.next())
             {
                json+=",children: ["+"{id:"+rs2.getString(2)+",text:" +"'"+ rs2.getString(3)+"'";
                Statement stmtww = con.createStatement();
                ResultSet rsww = stmtww.executeQuery("select * from ctlm03 where mod_id="+rs2.getString(2));
                if(rsww.next()){
                   json += ",children:["+"{id:"+rsww.getString(2)+",text:"+"'"+rsww.getString(3)+"',leaf:true}";
                   System.out.print(json);
                   System.out.println("第3个断点,\n");
                   while(rsww.next()){
                         json += ",{id:"+rsww.getString(2)+",text:"+"'"+rsww.getString(3)+"',leaf:true}";
                         System.out.print(json);
                         System.out.println("第3个断点,\n");
                   }
                   json +="]";
                }
                json +="}";
                System.out.print(json);
                System.out.println("第6个断点,\n"); 
                while(rs2.next())
                {
                     json +=","+"{id:"+rs2.getString(2)+",text:" +"'"+ rs2.getString(3)+"'";
                     
                     Statement stmtww1 = con.createStatement();
                     ResultSet rsww1 =stmtww1.executeQuery("select * from ctlm03 where mod_id="+rs2.getString(2));
                     
                     if(rsww1.next()){
                         json += ",children:["+"{id:"+rsww1.getString(2)+",text:"+"'"+rsww1.getString(3)+"',leaf:true}";
                         System.out.print(json);
                         System.out.println("第3个断点,\n");
                         while(rsww1.next()){
                            json += ",{id:"+rsww1.getString(2)+",text:"+"'"+rsww1.getString(3)+"',leaf:true}";
                            System.out.print(json);
                            System.out.println("第3个断点,\n");
                         }//其他子模块的子窗口查找结束
                     json +="]";
                }
                json +="}";
                     
                     
                     
                     
                     
                } 
                json += "]";
                System.out.print(json);
                System.out.println("第7个断点,\n"); 
             } 
             json+="}";  
             System.out.print(json);
             System.out.println("第8个断点,\n"); 
        }
    }
    json += "]";
    System.out.print(json);
    System.out.println("第9个断点,\n"); 
 //       System.out.print(json);
       
        
  response.getWriter().write(json);  
  rs.close();   
  }catch(Exception   e){   
  System.out.println("数据库操作时出现了错误!");   
  }   
%>
  • 描述: 这个是页面,请有经验的朋友帮帮忙吧,实在进行不下去了
  • 大小: 111.7 KB
0 请登录后投票
   发表时间:2008-07-18  
你这种情况是比较简单

既然树结点和checkbox能显示出来,
只要在/rsgl/yonghuzuquanxiandata.jsp页面里(称为后台)在形成每个结点,
既组装json {id:x,text:x ... 时,判断一下当前组装的结点是否为用户有权限的结点,如果是,则加上checked:true,最终形成的JSON形如:
[
{id:x,text:xx,checked:true,children:[{id:y,text:yy,checked:false,leaf:true},{...}...]},
{id:x,text:xx,checked:true,children:[{id:y,text:yy,checked:true,leaf:true},{...}...]},
...
]
0 请登录后投票
   发表时间:2008-07-29  

请教:为什么我单选没有效果。多选,级联和选择事件都有效的。
声明树种已加了checkModel: "single"
代码:

var Tree = Ext.tree;
var tree = new Tree.TreePanel({
     el:'tree-ct',
     autoScroll:true,
     animate:true,
     enableDD:true,
     containerScroll: true,
     checkModel: 'single' ,
     loader: new Ext.ux.DWRTreeLoader({
         dwrMethod: TreeHelper.getTree,

         baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI } //添加 uiProvider 属性
     })
});

 

是在renderElements 中根据checkModel进行处理吗?

0 请登录后投票
   发表时间:2008-07-29  
关于单选是否应该在renderElements中进行判断是否单选,
然后在<input class="x-tree-node-cb" type="checkbox" '中根据不同类型生成radio或者checkbox


还有按照该方法生成的单选在选中处理中:
n.attributes.checked = checked;
tree.fireEvent('check', n, checked);

var cns = tree.getChecked();
得到的选中节点数在ff中是1,而在ie中出问题了,是0;单选总是选不中。
请问是怎么回事?
0 请登录后投票
   发表时间:2008-07-31  
在单选上确定存在你所说的问题,现在已经更正过来,谢谢!!
0 请登录后投票
   发表时间:2008-08-01  
很感谢 xiexueze 提供了那么好用的东西,但我现在不需要checkbox,像用radio,因为需求要求只能选一个节点。我在<input class="x-tree-node-cb" type="checkbox" 把type="checkbox"改成type="radio"后,选不了,一点击radio,就相当于双击了它。请问应该怎么改啊?
0 请登录后投票
   发表时间:2008-08-01  
我的问题解决了,不好意思。因为TreeCheckNodeUI包是以前就下了的。没注意到xiexieze昨天已经更改了单选的问题,刚才下了新的包,就可以了!
0 请登录后投票
   发表时间:2008-08-01  
var arry = tree.getChecked();
for (var i = 0; i < arry.length; i++)
{
alert(arry[i].text);
}

我获得选中的节点的集合后使用alert(arry[i].text);能够把每个节点都显示出来,但是使用Ext.Msg.alert(arry[i].text);却只显示最后一个节点
0 请登录后投票
   发表时间:2008-08-01  
请问 xiexueze
    我要在checkboxtree旁边加个全选和全不选按钮,
     来选择树的节点,代码怎么写啊?
0 请登录后投票
   发表时间:2008-08-01  
我用js代码是可以做到,但是在用extjs方法取选中的节点,取不到
我想是不是要用extjs的方法写才行啊
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics