jstree 主页
其中提供了一种从后台取数据渲染成树的形式
$(#mytree)tree({
data:{
type:json
url:${ctx}/user/power!listdo
}
});
对于url中返回的值必须是它定义的json数据形式
$(#demo)tree({
data:{
type:json
json:[
{attributes:{id:pjson_}state:opendata:Rootnodechildren:[
{attributes:{id:pjson_}data:{title:Customiconicon:/media/images/okpng}}
{attributes:{id:pjson_}data:Childnode}
{attributes:{id:pjson_}data:Someotherchildnode}
]}
{attributes:{id:pjson_}data:Rootnode}
]
}
});
这里需要一个从后台实例集合转换为它规定的json数据的形式
/**
*无限递归获得jsTree的json字串
*
*@paramparentId
*父权限id
*@return
*/
privateStringgetJson(longparentId)
{
//把顶层的查出来
List<Action>actions=actionManagerqueryByParentId(parentId);
for(inti=;i<actionssize();i++)
{
Actiona=actionsget(i);
//有子节点
if(agetIshaschild()==)
{
str+={attributes:{id:\+agetAnid()
+\}state:\open\data:\+agetAnname()+\;
str+=children:[;
//查出它的子节点
List<Action>list=actionManagerqueryByParentId(agetAnid());
//遍历它的子节点
for(intj=;j<listsize();j++)
{
Actionac=listget(j);
//还有子节点(递归调用)
if(acgetIshaschild()==)
{
thisgetJson(acgetParentid());
}
else
{
str+={attributes:{id:\+acgetAnid()
+\}state:\open\data:\+acgetAnname()
+\+};
if(j<listsize())
{
str+=;
}
}
}
str+=];
str+=};
if(i<actionssize())
{
str+=;
}
}
}
returnstr;
}
调用
@ornventionannotationAction(results=
{@Result(name=successlocation=/main/user/actionlistjsp)})
publicStringlist()
{
Stringstr=[;
//从根开始
str+=thisgetJson();
str+=];
thisrenderJson(str);
returnnull;
}
其中Action是菜单类或权限类等的实体
效果图