<!-- 递归 宏定义 -->
<ul>
<#macro bpTree children>
<#list children as child>
<#if child.children?? && child.children?size gt 0>
<li>
<#if child.F_URL??>
<a href="${child.F_URL}" >
<#else>
<a href="" >
</#if>
<#if child.F_ICON ??>
<i class="${child.F_ICON}"></i>
</#if>
<span class="nav-label">${child.F_NAME}</span>
<span class="fa arrow"></span>
</a>
<ul class="nav">
<@bpTree children=child.children />
</ul>
</li>
<#else>
<li>
<#if child.F_URL ??>
<a href="${child.F_URL}" class="J_menuItem">
<#else>
<a href="" class="J_menuItem">
</#if>
<#if child.F_ICON ??>
<i class="${child.F_ICON}" ></i>
</#if>
<span class="nav-label">${child.F_NAME}</span></a>
</li>
</#if>
</#list>
</#if>
</#macro>
<!-- 调用宏 生成递归树 -->
<@bpTree children=nodes />
</ul>
本文介绍如何使用Freemarker模板引擎中的宏定义实现递归生成菜单树结构。通过条件判断和列表遍历,根据节点的子节点是否存在及URL和图标属性来动态生成带有展开箭头的导航菜单项。
1万+

被折叠的 条评论
为什么被折叠?



