|
精华帖 (0) :: 良好帖 (15) :: 新手帖 (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的方法写才行啊 |
|
| 返回顶楼 | |



