文档章节

Jfinal模板解析菜单树

一个yuanbeth
 一个yuanbeth
发布于 2017/09/06 21:38
字数 596
阅读 48
收藏 2
点赞 1
评论 4

昨天用了一天时间写后台菜单树,今天就要想办法用jfinal的模板解析并显示,因为第一次使用jfinal的模板引擎,有点没有信心,但后来还是很容易的就是实现了。

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>

© 著作权归作者所有

共有 人打赏支持
一个yuanbeth
粉丝 79
博文 99
码字总数 62850
作品 0
深圳
程序员
加载中

评论(4)

一个yuanbeth
一个yuanbeth

引用来自“我爱程序yuan”的评论

引用来自“JFinal”的评论

#for 指令遍历 List<Object> 是一定可以的,感谢你的分享 :thumbsup:

回复@JFinal : 昨天没仔细试,今天试了果然是可以的

引用来自“JFinal”的评论

#for 指令对 List 的迭代是最基本的、最重要的功能之一,必然要支持。 不仅支持 List, #for 指令还支持任意类型的数据迭代, 例如支持:null、Object、枚举等等

还支持 else 语句:
#for ( x : null )
...
#else
...
#end

上面的语句在循环次数为 0 时,执行 else 块, enjoy coding and enjoy life
:+1:
JFinal
JFinal

引用来自“我爱程序yuan”的评论

引用来自“JFinal”的评论

#for 指令遍历 List<Object> 是一定可以的,感谢你的分享 :thumbsup:

回复@JFinal : 昨天没仔细试,今天试了果然是可以的
#for 指令对 List 的迭代是最基本的、最重要的功能之一,必然要支持。 不仅支持 List, #for 指令还支持任意类型的数据迭代, 例如支持:null、Object、枚举等等

还支持 else 语句:
#for ( x : null )
...
#else
...
#end

上面的语句在循环次数为 0 时,执行 else 块, enjoy coding and enjoy life
一个yuanbeth
一个yuanbeth

引用来自“JFinal”的评论

#for 指令遍历 List<Object> 是一定可以的,感谢你的分享 :thumbsup:

回复@JFinal : 昨天没仔细试,今天试了果然是可以的
JFinal
JFinal
#for 指令遍历 List<Object> 是一定可以的,感谢你的分享 :thumbsup:
基于JFinal实现的权限管理系统 JFinalUIB

项目用到了众多的开源组件,还有一些是网络分享的学习示例代码片段,感谢他们!!! JFinal高级学习交流QQ群:309647612 代码库地址:http://git.oschina.net/dongcb678/JfinalUIB.git 项目背景...

littleant
2014/06/03
0
35
jfinal-admin 3.3 发布,Bug 修复更新

jfinal-admin 3.3 版本正式发布啦。该版本主要进行了一些 Bug 修复,主要更新内容如下: 1、登录加密算法更新,修复DES秘钥初始化的bug; 2、任务管理模块更新,修复任务调度配置时执行类参数...

IT小香猪
07/13
0
0
jfinal-admin 3.2 发布,beetl 模板升级到 2.7.14

jfinal-admin 3.2 版本正式发布啦。 基于JFinal的后台管理系统,采用了简洁强大的JFinal作为web框架,模板引擎用的是beetl,数据库用mysql,前端bootstrap框架。 演示地址 http://jad.yxyun...

IT小香猪
04/19
0
0
JFinal-Beetl-Shiro(JdbcRealm)-例子

JFinal-Shiro-JDBC-Demo http://git.oschina.net/yinjun622/JFinal-Shiro-JDBC-Demo 简单实现@JFinal与Shiro整合例子 1、工程通过Eclipse直接导入,部署到tomcat中; 2、新建jfinalshiro数据......

leon_rock
2014/02/27
0
12
使用Freesql简单地实现多条件查询

在实际应用中我们经常会遇到多条件查询的情景,以往的解决方案是在java中对各个参数值进行非空之类的判断,再进行sql及参数的拼凑。 其实还有更简单的解决方法的--用Freemarker。Freemarker可...

jse7en
2014/03/23
0
4
JFinal 3.4 发布,将极速贯彻到 UI 层

jfinal 的终极目标是全面实现软件开发整个过程的极速开发,极大提升开发效率,极大降低学习成本,极大提升开发体验 jfinal 诞生头五年,已实现 WEB + ORM + AOP 层面的极速开发,赢得了大量开...

JFinal
04/28
0
129
OSC上关于Jfinal的提问整理(二)

1.【问】:Db.tx(new IAtom())事务不起作用? 【jfinal答】:1:如果使用的mysql,确保引擎为 InnoDB 2:这行代码改一下Db.save(c3p0Plugin.getDataSource(), "tbtest", "PKID", record);去掉...

木川瓦兹
2013/04/25
0
2
JFinal极速开发实战教程新鲜出炉~

JFinal极速开发实战教程新鲜出炉~ [持续更新中...] JFinal框架让 IT 工程师发挥更大的潜能,实现更大价值,同时也希望 JFinal 工具力量能帮助正在创业的朋友们提升效率、降低成本从而实现创业...

山东-小木
2015/01/07
0
13
OSC上关于Jfinal的提问整理(一)

看见Jfinal很火,就手痒痒了,想学一下,无奈入门较慢,没有找到比较全的文档。于是就经常看讨论区大家的提问与解答。后来就忽然萌生了整理下来的想法。其中的问题如果是@Jfinal 回答的,那我...

木川瓦兹
2013/04/23
0
21
JFinal针对ORACLE的timestamp字段解决办法

JFinal是个比较不错的的框架,但JFinal起源时使用mysql数据库,因此在对数据库支持方面还没有达到完美。 本人使用JFinal有一段时间的,由于项目的数据库普遍采用oracle,在使用oracle过程中遇...

真的农夫三拳
2013/06/23
0
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
37分钟前
16
0
流利阅读笔记30-20180719待学习

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
39分钟前
1
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
52分钟前
7
1
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
今天
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
9
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部