Jfinal模板解析菜單樹

昨天用了一天時間寫後臺菜單樹,今天就要想辦法用jfinal的模板解析並顯示,由於第一次使用jfinal的模板引擎,有點沒有信心,但後來仍是很容易的就是實現了。javascript

1.回顧一下在這個過程當中遇到的幾個小問題java

(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再調用後臺方法去獲取菜單權限)ui

(2)map.key的時候這個key只能是常量,不能是變量,若是key是變量,只能用map[key]才行。this

(3)遍歷一個List<Object>,開始我用的是for(s:list),發現不行,後來用了 #for(i=0;i<s;i++)的形式就能夠了。url

2回顧一下代碼解析過程以下所示:code

#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下)ip

(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>
相關文章
相關標籤/搜索