Ext js的动态树,网上百度了一大片,都只是加载本地文件,此处不再说明,我这里使用spring mvc.
<------由于工程里还有其他代码,所以只贴tree相关代码------>
先贴layout js代码:
var loader=new Ext.tree.TreeLoader({
url:"/tree.do"
});
var root=new Ext.tree.AsyncTreeNode({
id:'0',
expanded:true,
loader:loader
});
var tree=new Ext.tree.TreePanel({
split: true,
useArrows: true,
rootVisible: false,
animate : true, // 开启动画效果
enableDD : false, // 不允许子节点拖动
border : false, // 没有边框
width: 210,
margins:'3 0 3 3',
lines:false,
root:root
});
后端controller代码:
@RequestMapping(value="/tree.do")
public void tree (String node,HttpServletRequest request, HttpServletResponse response) throws Exception{
HttpSession session=request.getSession();
System.out.println("中国人"+(String)session.getAttribute("uname"));
List <ResourceVO> resource=proManagerSVC.searchResource((String)session.getAttribute("uname"));
String json="";
if("0".equals(node)){
for (ResourceVO resourceVO : resource) {
//是管理员时,拥有两种权限 父目录 ID 为1
if("RO20001".equals(resourceVO.getRoleid())){
if("1".equals(resourceVO.getReslevel())){
json+="[{id:1,cls:'forum-ct',expanded : true,text:'"+resourceVO.getResnm()+"',leaf:false}";
}
else if("2".equals(resourceVO.getReslevel()))
json+=",{id:2,cls:'forum-ct',text:'"+resourceVO.getResnm()+"',leaf:false}]";
}
//普通用户时,只有购买权限 父目录 ID 为2
else if("RO20002".equals(resourceVO.getRoleid())){
if("2".equals(resourceVO.getReslevel())){
json+="[{id:2,cls:'forum-ct',text:'"+resourceVO.getResnm()+"',leaf:false}]";
}
}
//manager时,只有查询权限 父目录 ID 为3
else if("RO20003".equals(resourceVO.getRoleid())){
if("1".equals(resourceVO.getReslevel())){
json+="[{id:3,cls:'forum-ct',text:'"+resourceVO.getResnm()+"',leaf:false}]";
}
}
}
}
else if("1".equals(node)){
for (ResourceVO resourceVO1 : resource) {
if("11".equals(resourceVO1.getReslevel())){
json+="[{id:11,icon:'images/forum.gif',text:'"+resourceVO1.getResnm()+"',leaf:true,href:'"+resourceVO1.getResurl()+"',hrefTarget:'frm0'}";
}
else if("12".equals(resourceVO1.getReslevel())){
json+=",{id:12,icon:'images/forum.gif',text:'"+resourceVO1.getResnm()+"',leaf:true,href:'"+resourceVO1.getResurl()+"',hrefTarget:'frm0'}]";
}
}
}
else if("2".equals(node)){
for (ResourceVO resourceVO1 : resource) {
if("21".equals(resourceVO1.getReslevel())){
json+="[{id:21,icon:'images/forum.gif',text:'"+resourceVO1.getResnm()+"',leaf:true,href:'"+resourceVO1.getResurl()+"',hrefTarget:'frm0'}]";
}
}
}
else if("3".equals(node)){
for (ResourceVO resourceVO1 : resource) {
if("12".equals(resourceVO1.getReslevel())){
json+="[{id:31,icon:'images/forum.gif',text:'"+resourceVO1.getResnm()+"',leaf:true,href:'"+resourceVO1.getResurl()+"',hrefTarget:'frm0'}]";
}
}
}
response.setContentType("text/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.print(json);
out.flush();
out.close();
}
Controller代码比较不好理解,而且也很不好写,这个是异步动态加载!有问题可以留言奥!
而且我这里有用到点击tree的node后会自动在frame name为frm0的打开页面。
ResourceVO里会获取如下table信息(当然只是部分):
最终效果: