zTree 权限树

分享给大家一些我使用zTree的心得。


背景:权限表(role_right) ,角色表(role),资源列表(menu),权限 字段为roleId,menuId.

需求:根据登陆的角色不同生成带有权限的资源树,在开发中我是用了oracle的一个特有查询:递归查询,

代码如下:


select m.menu_id as menuid,
m.code as code,
m.name as name,
m.url as url,
m.type as type,
m.parentid as parentid,
m.memo as memo,
m.no as no,
m.is_branch as isbranch,

m.LEVELS as levels,
nvl((select '0'
from uup_menu um
where exists (select 'x'
from uup_role_right rr
where um.menu_id = rr.menu_id(+)
and um.menu_id = m.menu_id
and rr.role_id = 1
and rownum = 1)),
'1') as flag
from uup_menu m
start with m.parentid = 0
and m.is_menu = 1
and m.is_show = 1
and m.rec_status = 1
connect by prior m.id = m.parentid
order siblings by m.no asc




重要字段:

No:排序字段、Level:第几级别。flag:标识是否在role_right有此资源

通过这个查询能很好的将数据库中关于资源列表按照No进行排序,(注意:

同级的no对同级有效,同一父级的子级按照no排序,当某个父级被影藏的时候对应的此父级的所有子级将不

会被查询出来)最终生成的将是一个排列好的按照顺序出来的数据集。

----------------------------------------------------------------------------

java程序需要查询的数据集拼接为json格式的字符串。部分代码:

/**
*
* @param roleId
* @return menuString --json格式的zTree节点数据
* @author tianyaxiangdong <br>
* @mail tianyaxiangdong@hotmail.com<br>
* @create 2010-8-15 <br>
* @update 2010-8-15 <br>
* @version 1.0<br>
* @desc 返回更具roleId查询出的树形资源列表。

* isCa标识是否被选中,不使用checkbox的时候可以将checked从代码中删除
* ztree所有的类型的 json数据都是一样的
* 使用的Ibatis<br>
*/

public String getMenuStringWhitCheckbox(Long roleId) {
String menuString = "";
HashMap parameterMap = new HashMap();
List<UupMenu> menuList = new ArrayList();
parameterMap.put("roleId",roleId );
parameterMap.put("isShow",1 );
parameterMap.put("isMenu",1 );
parameterMap.put("recStatus", UupMenu.REC_STATUS_VALID);
menuList = searchUupMenuChecked(parameterMap);
int size = menuList.size();


String icon = ""; // 暂时未用到

String nId ="";
String nName = "";
int levels = 1;
int isCa = 0; //是否选中

UupMenu menuNext = null;
UupMenu menu = null;
UupMenu menuBefor = null;

String str2 ="";
String str3 = "";
for (int i=0;i< size;i++)
{

menu = menuList.get(i);
nId = menu.getMenuId().toString();
nName = menu.getName();
levels = menu.getLevels();
isCa = menu.getIsCa();
boolean b_isCa = false;
if(isCa == 0)
b_isCa = true;
if(i < size-1)
{
menuNext = menuList.get(i+1);
if( i > 0)
menuBefor = menuList.get(i-1);

if(levels < menuNext.getLevels() ) //表示为是公共节点
{

str2 += "{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ' , checked:"+b_isCa+" ";

str2 += " ,nodes: [";
}

if( levels > menuNext.getLevels()) //标识此处为菜单从子级向它父级的同级过渡
{

str2 += "{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ' , checked:"+b_isCa+" }";

int len = levels - menuNext.getLevels();
for( int l = 0;l < len;l++)
{
str2 += "]}";
}

str2 += ",";
}
if(levels == menuNext.getLevels())
{

if(menuBefor != null){
if(levels > menuBefor.getLevels())
str3 ="";
}

str2 += str3+"{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ', checked:"+b_isCa+" },";
}
}
else //最后一个菜单, 如果
{
String endStr = "";

if(levels > 1){ //最后一个菜单项为第3级才需要使用" ]} "包含
for(int k=0;k<levels-1;k++){
endStr += "]}";
}
str2 += "{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ', checked:"+b_isCa+" } "+endStr;
}
else
str2 += "{ 'id':'"+nId+"', 'name':'"+nName+"', 'icon':' ', checked:"+b_isCa+" }";
}
}

menuString = "["+str2+"]";

return menuString;
}


---------------------searchUupMenuChecked.java

/*
* 使用oracle 递归查询 带有checked 的树。
*/
private List searchUupMenuChecked(HashMap parameterMap) {
List<UupMenu> uupMenuList = (List) getSqlMapClientTemplate().queryForList(
"searchUupMenuChecked", parameterMap);
return uupMenuList;
}


-----------------------------------------

ps:以上代码为java代码。某些备注有问题。希望自己能耐心看一遍

注意:level是其中最重要的一个参数,他标识当前资源是第几级,当当前资源是过渡资源的时候,需要进行

封口("]}"),通过级别能轻易算出当前资源和下一资源的级别关系,从而确定经行几次封口。

----------------------------------------------------------------------

感谢zTree作者,希望zTree越来越棒。
http://baby666.cn/----zTree官网
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值