java 树形菜单遍历_java freemarker遍历树形菜单(导航栏菜单)

最近在写框架,到了模板对树形的处理,从后台到前端有必要把整个过程记录下来

freemarker是一套模板引擎,主要用于数据的展示,你能看到这篇文章相信你对freemarker有所了解。

首先看我们的菜单(树形)数据结构

代码生成:

import java.io.Serializable;

import java.util.ArrayList;

import java.util.List;

public class SysMenu implements Serializable {

private String id;

/**菜单名称*/

private String name;

/**父菜单*/

private String pId;

/**请求地址*/

private String url;

/**排序序号*/

private Integer orderNum;

/**图标*/

private String ico;

//child

private List children=new ArrayList();

//省略get set...

public SysMenu(String name, String url) {

this.name = name;

this.url = url;

}

public void addChild(SysMenu sysMenu){

children.add(sysMenu);

}

}

这里json用的阿里的fastjson

public JSONArray getMenu(){

SysMenu root=new SysMenu("系统管理","url");

SysMenu root1=new SysMenu("其他管理","url");

SysMenu m1=new SysMenu("用户管理","user/ShowUser");

SysMenu m2=new SysMenu("角色管理","user/ShowUser");

SysMenu m3=new SysMenu("权限管理","user/ShowUser");

SysMenu m4=new SysMenu("用户列表","user/ShowUser");

SysMenu m5=new SysMenu("会员管理","user/ShowUser");

SysMenu m6=new SysMenu("VIP管理","user/ShowUser");

SysMenu m7=new SysMenu("VIP管理1","user/ShowUser");

m6.addChild(m7);

m3.addChild(m5);

m3.addChild(m6);

root.addChild(m1);

root.addChild(m2);

root.addChild(m3);

root1.addChild(m4);

JSONArray json=new JSONArray();

json.add(root);

json.add(root1);

System.out.println(json);

return json;

}

print:

[

{

"children": [

{ "children": [],"name": "用户管理", "url": "user/ShowUser" },

{ "children": [], "name": "角色管理","url": "user/ShowUser" },

{"children": [

{"children": [], "name": "会员管理","url": "user/ShowUser" },

{ "children": [ { "children": [], "name": "VIP管理1", "url": "user/ShowUser" } ],

"name": "VIP管理","url": "user/ShowUser" }

],

"name": "权限管理", "url": "user/ShowUser" }

],

"name": "系统管理", "url": "url" },

{ "children": [ {"children": [], "name": "用户列表", "url": "user/ShowUser"}

],

"name": "其他管理", "url": "url" }

]

好的 我们用java模拟下数据的展示:

public void jxJson(JSONArray ja,int x,int end){

if(x==0){

System.out.println("begin");

}

String str=" ";

x++;

for(int k=0;k

str+=str;

}

for(int i=0;i

SysMenu menu= (SysMenu) ja.get(i);

if(menu.getChildren().size()>0){

System.out.println(str+menu.getName()+"-----------"+x+"级菜单");

JSONArray js=new JSONArray();

for(int j=0;j

js.add(menu.getChildren().get(j));

}

jxJson(js,x,end);

}else{

System.out.println(str+x+"级子菜单-----------"+menu.getName());

}

}

}

@Test

public void test(){

jxJson(getMenu(),0,getMenu().size());

System.out.println("结束");

}

print:

begin

系统管理-----------1级菜单

2级子菜单-----------用户管理

2级子菜单-----------角色管理

权限管理-----------2级菜单

3级子菜单-----------会员管理

VIP管理-----------3级菜单

4级子菜单-----------VIP管理1

其他管理-----------1级菜单

2级子菜单-----------用户列表

结束

对 这就我们想要的无限级数据权限,我们用freemarker实现的话依旧要根据递归实现数据展示,那么就要用到freemarker的宏来实现,对宏不了解的可以看看这边博文介绍:

下面是实现代码:

#if>

${child.name}

${child.name}

#if>#list>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值