文档章节

Jfinal模板解析菜单树

一个yuanbeth
 一个yuanbeth
发布于 2017/09/06 21:38
字数 596
阅读 55
收藏 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
博文 112
码字总数 68180
作品 0
深圳
程序员
私信 提问
加载中

评论(4)

一个yuanbeth
一个yuanbeth

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

引用来自“JFinal”的评论

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

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

引用来自“JFinal”的评论

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

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

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

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

引用来自“JFinal”的评论

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

回复@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> 是一定可以的,感谢你的分享 👍

回复@JFinal : 昨天没仔细试,今天试了果然是可以的
JFinal
JFinal
#for 指令遍历 List<Object> 是一定可以的,感谢你的分享 👍
jfinal cms v4.5.0,加入附件备份处理

jfinal cms v4.5.0 发布了,该版本主要加入了上传附件的备份处理,并对jfinal cms说明文档进行了优化、完善。 更新说明: 完成了附件上传备份机制,支持文件系统备份和阿里云OSS备份。 对ued...

Fly的狐狸
2017/04/06
889
3
jfinal cms v4.1.1 发布了,jfinal + beetl的cms

现在jfinal cms已经很稳定了,大家可以放心使用。最新事情比较多,后续我还会持续进行项目优化,并丰富展示模板。 jfinal cms v4.1.1 发布了,更新说明: 修复多站点UrlKey一直导致的不可预知...

Fly的狐狸
2016/08/01
6.2K
26
jfinal cms v4.0.0 支持多站点管理

jfinal cms v4.0.0 发布了,更新说明: 此版本加入了多站点功能,改动较大,不兼容之前版本。如果使用之前单站点版本请下载tag下3.1.1。 加入多站点支持。栏目、文章、公告、友情链接、oauth...

Fly的狐狸
2016/05/12
2.8K
8
jfinal cms v4.1.2 发布,加入博客模板

这个版本主要加入了博客模板,之前有一个单独博客项目,现在将该项目作为模板加入到jfinal cms中。 jflyfox博客源码地址:http://git.oschina.net/flyfox/jflyfox jfinal cms v4.1.2 发布了,...

Fly的狐狸
2016/09/21
2.6K
15
jfinal cms v4.7.0 发布,让项目更简洁

本次更新主要去除了jflyfox_base和jflyfox_jfinal项目的依赖~进行了部分代码优化和重构,让项目更一目了然; 上一版本更新说明: 重构站点逻辑代码,让后台站点配置与前台站点配置分离; de...

Fly的狐狸
2017/06/19
7.4K
16

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部