文档章节

Jfinal模板解析菜单树

一个yuanbeth
 一个yuanbeth
发布于 2017/09/06 21:38
字数 596
阅读 48
收藏 2

昨天用了一天时间写后台菜单树,今天就要想办法用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
粉丝 81
博文 103
码字总数 64572
作品 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 cms v4.7.1 发布,升级 jfinal 到 最新 3.4 版本

经历了互联网研发人员加班模式,最近动静比较小(也可能是质量比较好了~!~); 该版本bug修复: jfinal 改为最新3.4版本 修复启动缓存设置不生效bug 其他细节修改 上一版本更新说明: 组织机...

Fly的狐狸
09/04
0
0
基于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

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
2
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
6
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
43
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部