精华帖 (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("数据库操作时出现了错误!"); } %> |
|
返回顶楼 | |
发表时间: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},{...}...]}, ... ] |
|
返回顶楼 | |
发表时间:2008-07-29
请教:为什么我单选没有效果。多选,级联和选择事件都有效的。 baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI } //添加 uiProvider 属性
是在renderElements 中根据checkModel进行处理吗? |
|
返回顶楼 | |
发表时间: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;单选总是选不中。 请问是怎么回事? |
|
返回顶楼 | |
发表时间:2008-07-31
在单选上确定存在你所说的问题,现在已经更正过来,谢谢!!
|
|
返回顶楼 | |
发表时间:2008-08-01
很感谢 xiexueze 提供了那么好用的东西,但我现在不需要checkbox,像用radio,因为需求要求只能选一个节点。我在<input class="x-tree-node-cb" type="checkbox" 把type="checkbox"改成type="radio"后,选不了,一点击radio,就相当于双击了它。请问应该怎么改啊?
|
|
返回顶楼 | |
发表时间:2008-08-01
我的问题解决了,不好意思。因为TreeCheckNodeUI包是以前就下了的。没注意到xiexieze昨天已经更改了单选的问题,刚才下了新的包,就可以了!
|
|
返回顶楼 | |
发表时间: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);却只显示最后一个节点 |
|
返回顶楼 | |
发表时间:2008-08-01
请问 xiexueze
我要在checkboxtree旁边加个全选和全不选按钮, 来选择树的节点,代码怎么写啊? |
|
返回顶楼 | |
发表时间:2008-08-01
我用js代码是可以做到,但是在用extjs方法取选中的节点,取不到
我想是不是要用extjs的方法写才行啊 |
|
返回顶楼 | |