Freemarker如何生成树形导航菜单(递归)

很多导航菜单是树形的,即一级一级往下分,这样的结构固然需要用递归来处理。

对于Freemarker 来说,宏就相当于函数,其定义了签名及参数列表。

所以在freemarker页面应这样写:

<#macro menuTree menus>
  <#if menus?? && menus?size gt 0>
   <#list menus as menu>
    <tr>
     <td>
      <input type="checkbox" name="ids" value="${menu.id}" />
     </td>
     <td>
   <span title="${menu.name!}" style="margin-left: ${menu.leaf * 30}px;[#if menu.leaf == 0] color: #000000;[/#if]">
   ${menu.menuName!}
   </span>
     </td>
     <td>
     ${menu.url!}
     </td>
     <td>
     ${menu.permissionText!}
     </td>
     <td>
     ${menu.sortNo!}
     </td>
     <td>
      <a href="edit.jhtml?id=${menu.id}">[编辑]</a>
     </td>
    </tr>
   <#if menu.menuBeans?? && menu.menuBeans?size gt 0>
    <@menuTree menus = menu.menuBeans/>
   </#if>
   </#list>
  </#if>
 </#macro>
 <!-- 调用宏 生成递归树 -->
<@menuTree menus = dto />

后台数据:

[
 {
  "id": 1,
  "enable": true,
  "remark": null,
  "createBy": 1,
  "createTime": 1503546411000,
  "updateBy": 1,
  "updateTime": 1503546415000,
  "keyword": null,
  "menuName": "系统管理",
  "menuType": 1,
  "parentId": null,
  "iconcls": null,
  "url": null,
  "expand": null,
  "sortNo": null,
  "permission": null,
  "moduleId": 1,
  "parentName": null,
  "leaf": 0,
  "typeName": null,
  "permissionText": null,
  "menuBeans": [
   {
    "id": 7,
    "enable": true,
    "remark": null,
    "createBy": 1,
    "createTime": 1503546411000,
    "updateBy": 1,
    "updateTime": 1503546415000,
    "keyword": null,
    "menuName": "模块管理",
    "menuType": 1,
    "parentId": 1,
    "iconcls": null,
    "url": "/module/list",
    "expand": null,
    "sortNo": null,
    "permission": null,
    "moduleId": 1,
    "parentName": null,
    "leaf": 1,
    "typeName": null,
    "permissionText": null,
    "menuBeans": null
   },
   {
    "id": 3,
    "enable": true,
    "remark": null,
    "createBy": 1,
    "createTime": 1503546411000,
    "updateBy": 1,
    "updateTime": 1503546415000,
    "keyword": null,
    "menuName": "菜单管理",
    "menuType": 1,
    "parentId": 1,
    "iconcls": null,
    "url": "/menu/list",
    "expand": null,
    "sortNo": null,
    "permission": "admin:add",
    "moduleId": 1,
    "parentName": null,
    "leaf": 1,
    "typeName": null,
    "permissionText": null,
    "menuBeans": null
   }
  ]
 },
 {
  "id": 2,
  "enable": true,
  "remark": null,
  "createBy": 1,
  "createTime": 1503546411000,
  "updateBy": 1,
  "updateTime": 1503546415000,
  "keyword": null,
  "menuName": "用户管理",
  "menuType": 1,
  "parentId": null,
  "iconcls": null,
  "url": null,
  "expand": null,
  "sortNo": null,
  "permission": null,
  "moduleId": 1,
  "parentName": null,
  "leaf": 0,
  "typeName": null,
  "permissionText": null,
  "menuBeans": [
   {
    "id": 9,
    "enable": true,
    "remark": null,
    "createBy": 1,
    "createTime": 1503546411000,
    "updateBy": 1,
    "updateTime": 1503546415000,
    "keyword": null,
    "menuName": "供应商管理",
    "menuType": 1,
    "parentId": 2,
    "iconcls": null,
    "url": null,
    "expand": null,
    "sortNo": null,
    "permission": null,
    "moduleId": 1,
    "parentName": null,
    "leaf": 1,
    "typeName": null,
    "permissionText": null,
    "menuBeans": null
   },
   {
    "id": 8,
    "enable": true,
    "remark": null,
    "createBy": 1,
    "createTime": 1503546411000,
    "updateBy": 1,
    "updateTime": 1503546415000,
    "keyword": null,
    "menuName": "部门管理",
    "menuType": 1,
    "parentId": 2,
    "iconcls": null,
    "url": null,
    "expand": null,
    "sortNo": null,
    "permission": null,
    "moduleId": 1,
    "parentName": null,
    "leaf": 1,
    "typeName": null,
    "permissionText": null,
    "menuBeans": null
   },
   {
    "id": 6,
    "enable": true,
    "remark": null,
    "createBy": 1,
    "createTime": 1503546411000,
    "updateBy": 1,
    "updateTime": 1503546415000,
    "keyword": null,
    "menuName": "权限管理",
    "menuType": 1,
    "parentId": 2,
    "iconcls": null,
    "url": "/user/list-6",
    "expand": null,
    "sortNo": null,
    "permission": null,
    "moduleId": 1,
    "parentName": null,
    "leaf": 1,
    "typeName": null,
    "permissionText": null,
    "menuBeans": null
   },
   {
    "id": 5,
    "enable": true,
    "remark": null,
    "createBy": 1,
    "createTime": 1503546411000,
    "updateBy": 1,
    "updateTime": 1503546415000,
    "keyword": null,
    "menuName": "角色管理",
    "menuType": 1,
    "parentId": 2,
    "iconcls": null,
    "url": "/user/list-5",
    "expand": null,
    "sortNo": null,
    "permission": null,
    "moduleId": 1,
    "parentName": null,
    "leaf": 1,
    "typeName": null,
    "permissionText": null,
    "menuBeans": null
   },
   {
    "id": 4,
    "enable": true,
    "remark": null,
    "createBy": 1,
    "createTime": 1503546411000,
    "updateBy": 1,
    "updateTime": 1503546415000,
    "keyword": null,
    "menuName": "分销商管理",
    "menuType": 1,
    "parentId": 2,
    "iconcls": null,
    "url": "/user/add-4",
    "expand": null,
    "sortNo": null,
    "permission": null,
    "moduleId": 1,
    "parentName": null,
    "leaf": 1,
    "typeName": null,
    "permissionText": null,
    "menuBeans": null
   },
   {
    "id": 10,
    "enable": true,
    "remark": null,
    "createBy": 1,
    "createTime": 1503546411000,
    "updateBy": 1,
    "updateTime": 1503546415000,
    "keyword": null,
    "menuName": "员工管理",
    "menuType": 1,
    "parentId": 2,
    "iconcls": null,
    "url": null,
    "expand": null,
    "sortNo": null,
    "permission": null,
    "moduleId": 1,
    "parentName": null,
    "leaf": 1,
    "typeName": null,
    "permissionText": null,
    "menuBeans": null
   }
  ]
 }
]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 基于Java的Spring框架来操作FreeMarker模板的示例

    1.通过String来创建模版对象,并执行插值处理 import freemarker.template.Template; import java.io.OutputStreamWriter; import java.io.StringReader; import java.util.HashMap; import java.util.Map; /** * Freemarker最简单的例子 * * @author leizhimin 11-11-17 上午10:32 */ public cla

  • Java用freemarker导出word实用示例

    最近一个项目要导出word文档,折腾老半天,发现还是用freemarker的模板来搞比较方便省事,现总结一下关键步骤,供大家参考,这里是一个简单的试卷生成例子. 一.模板的制作 先用Word做一个模板,如下图: (注意,上面是有表格的,我设置了边框不可见)然后另存为XML文件,之后用工具打开这个xml文件,有人用firstobject XML Editor感觉还不如notepad++,我这里用notepad++,主要是有高亮显示,和元素自动配对,效果如下: 上面黑色的地方基本是我们之后要替换的地

  • spring mvc整合freemarker基于注解方式

    基于网络改进为:最正常版本 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans     xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:p="htt

  • freemarker 数字格式化深入理解

    一.使用内建函数c 特点: 不管其表现形式是怎样的(例如"123,456.123,456"."123456.123456"."000123456.123456000"."123,456.123456"."1,2345,6.123456"),只要小数分割符是'.'它就能转化成计算机能够识别的字符串形式,而且都是123456.123456,计算机处理的时候是没有那些所谓的千位分隔符的(空格或逗号),而且计算机支

  • freemarker判断对象是否为空的方法

    FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP.它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等. freemarker中显示某对象使用${name}. 但如果name为null,freemarker就会报错.如果需要判断对象是否为空: <#if name??> -- </#if> 当然也可以通过设置默认值${name!''}来避免对象为空的错误.如果name为空,就以默认值("!"后的字

  • Freemarker常用指令使用示例

    我的开发环境框架:springmvc+freemarker开发工具:springsource-tool-suite-2.9.0JDK版本:1.6.0_29tomcat版本:apache-tomcat-7.0.26 step1.编写controller文件,代码如下: 复制代码 代码如下: package www.asuan.com.controller; import java.util.ArrayList;import java.util.Date;import java.util.HashM

  • FreeMarker配置(Configuration)

    p> 基础 Configuration 是一个存放应用级别(application level)公共配置信息,以及模版(Template)可使用的全局共享变量的一个对象.同时它还负责模版(Template)实例的创建以及缓存.Configuration 实际上是freemarker.template.Configuration 对象的实例,使用其构造函数创建.通常应用使用一个共享的单实例Configuration 对象. Configuration 对象可被Template 对象的方法使用,每一

  • Java操作FreeMarker模板引擎的基本用法示例小结

    FreeMarker 是一个采用 Java 开发的模版引擎,是一个基于模版生成文本的通用工具. 它被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序.虽然使用FreeMarker需要具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMarker 生成页面,并通过模板显示准备的数据. http://freemarker.org/ public void process(String template, Map<String, ?> data) th

  • 使用Java进行FreeMarker的web模板开发的基础教程

    一.概述 FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写,FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由FreeMarker 生成页面,通过模板显示准备的数据(如下图) FreeMarker 不是一个 Web 应用框架,而适合作为 Web 应用框架一个组件.FreeMarker 与容器无关,因为它并不知道

  • java Spring整合Freemarker的详细步骤

    我的開發環境框架:springmvc開發工具:springsource-tool-suite-2.9.0版本:1.6.0_29tomcat版本:apache-tomcat-7.0.26前言:FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP.它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等.簡而言之,Freemarker就是在Jave Web開發

随机推荐