Jfinal模板解析菜单树
2017-09-07 00:41
141 查看
昨天用了一天时间写后台菜单树,今天就要想办法用jfinal的模板解析并显示,因为第一次使用jfinal的模板引擎,有点没有信心,但后来还是很容易的就是实现了。
1.回顾一下在这个过程中遇到的几个小问题
(1)我返回菜单树的结构如下所示:
这里只展示了一个一级菜单及其下面的菜单树,键为一级菜单的id,值为一级菜单下的子菜单。
(其实一开始我的键用的是一个permission对象,这样我需要的信息我都可以直接获取,但是后来看了下官方文档说键只能用String ,所以我就改为id,取出id再调用后台方法去获取菜单权限)
(2)map.key的时候这个key只能是常量,不能是变量,如果key是变量,只能用map[key]才行。
(3)遍历一个List<Object>,开始我用的是for(s:list),发现不行,后来用了 #for(i=0;i<s;i++)的形式就可以了。
2回顾一下代码解析过程如下所示:
(1)首先定义一个函数,已供后面左侧导航调用并显示
(2) #set(currentMenu = getCurrentUrl())用于获取每次请求的路径,以便设置选中和展开状态
(3) #for(menuTree : menuTrees)循环整个属性菜单,获取每个一级菜单树(后台把每个一级菜单树都放在List下)
(4) #set(parentMenu=getParentMenu(menuTree))获取一级菜单树,如果有多级,则表示获取父菜单树
(5)( <li #if(parentMenu.ispen) class="layui-nav-item layui-nav-itemed" #else class="layui-nav-item" #end" >) <a class="javascript:;" href="javascript:;">#(parentMenu.permission_name)</a>显示一级菜单(或父菜单),如果有下级被选中,则展开,否则不展开。
(6) #set(subMenuList = menuTree[parentMenu.id])根据一级菜单(或父菜单)id获取所有子菜单
(7)循环所有子菜单并显示
1.回顾一下在这个过程中遇到的几个小问题
(1)我返回菜单树的结构如下所示:
{f9721e2f4a704969b6c3b1ae166f6333= [{action_url:/perm,action_type:1,permission_name:权限管理,}, {action_url:/user,action_type:1,permission_name:用户管理}, {action_url:/role,action_type:1,permission_name:角色管理}] }
这里只展示了一个一级菜单及其下面的菜单树,键为一级菜单的id,值为一级菜单下的子菜单。
(其实一开始我的键用的是一个permission对象,这样我需要的信息我都可以直接获取,但是后来看了下官方文档说键只能用String ,所以我就改为id,取出id再调用后台方法去获取菜单权限)
(2)map.key的时候这个key只能是常量,不能是变量,如果key是变量,只能用map[key]才行。
(3)遍历一个List<Object>,开始我用的是for(s:list),发现不行,后来用了 #for(i=0;i<s;i++)的形式就可以了。
2回顾一下代码解析过程如下所示:
#define traceShowMenu(menuTrees) #set(currentMenu = getCurrentUrl()) #for(menuTree : menuTrees) #set(parentMenu=getParentMenu(menuTree)) <li #if(parentMenu.ispen) class="layui-nav-item layui-nav-itemed" #else class="layui-nav-item" #end" > <a class="javascript:;" href="javascript:;">#(parentMenu.permission_name)</a> #set(subMenuList = menuTree[parentMenu.id]) <dl class="layui-nav-child"> #for(i=0;i<subMenuList.size();i++) <dd #if(currentMenu==subMenuList[i].action_url) class="layui-this" #end > <a href="#(subMenuList[i].action_url)">#(subMenuList[i].permission_name) </a> </dd> #end </dl> </li> #end #end
(1)首先定义一个函数,已供后面左侧导航调用并显示
(2) #set(currentMenu = getCurrentUrl())用于获取每次请求的路径,以便设置选中和展开状态
(3) #for(menuTree : menuTrees)循环整个属性菜单,获取每个一级菜单树(后台把每个一级菜单树都放在List下)
(4) #set(parentMenu=getParentMenu(menuTree))获取一级菜单树,如果有多级,则表示获取父菜单树
(5)( <li #if(parentMenu.ispen) class="layui-nav-item layui-nav-itemed" #else class="layui-nav-item" #end" >) <a class="javascript:;" href="javascript:;">#(parentMenu.permission_name)</a>显示一级菜单(或父菜单),如果有下级被选中,则展开,否则不展开。
(6) #set(subMenuList = menuTree[parentMenu.id])根据一级菜单(或父菜单)id获取所有子菜单
(7)循环所有子菜单并显示
<dl class="layui-nav-child"> #for(i=0;i<subMenuList.size();i++) <dd #if(currentMenu==subMenuList[i].action_url) class="layui-this" #end > <a href="#(subMenuList[i].action_url)">#(subMenuList[i].permission_name) </a> </dd> #end </dl>
相关文章推荐
- 【今日开讲】--- JFinal框架全解析(一)
- FreeMarker解析字符串模板
- thinkphp 模板解析的流程
- 模板方法模式深度解析(三)
- 模板方法模式(Template Method) - 最易懂的设计模式解析
- 数据结构图文解析之:队列详解与C++模板实现
- 【开源项目5】测滑菜单MenuDrawer的使用以及解析
- 第五章:【UCHome二次开发】模板解析
- [MFC编程]CString模板结构解析
- 解析:用 CSS3 和 JavaScript 制作径向动画菜单
- 模板解析变量理解
- 实现基于FTL模板的菜单之一
- js解析字符串转换成json对象 将字符串内容生成左侧菜单
- 二级联动菜单&解析xml
- 高性能JavaScript模板引擎原理解析
- ThinkPHP 3.2 模板中的Angularjs 的变量{{$first}} 无法被解析
- 小博老师解析Java核心技术 ——JSwing高级菜单制作
- dedecms 模板中解析php代码
- 【UCHome二次开发】模板解析
- mnist的Tensorflow官方模板(fullly_connected_feed.py文件中参数解析问题)