如何使用 thymeleaf 递归渲染菜单

2023-12-07

我想使用 ul/li 列表呈现 HTML 菜单。我有这个类结构:

public class MenuItem {

    private String name;

    private MenuItem parent;

    private List<MenuItem> children;

    public MenuItem(String name,List<MenuItem> children) {
        this.name = name;
        this.children = children;
        for (MenuItem child : children) {
            child.parent = this;
        }
    }

    public MenuItem(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public MenuItem getParent() {
        return parent;
    }

    public List<MenuItem> getChildren() {
        return children;
    }
} 

正如您所看到的,它是典型的树结构,其中一个根元素包含对其子元素的引用,并且它们也对其子元素进行引用,依此类推。

现在我想渲染这样的结构:

<ul>
    <li>Item 1
        <ul>
            <li>Item 1.1</li>
            <li>Item 1.2
                <ul>
                    <li>Item 1.2.1</li>
                    <li>Item 1.2.3</li>
                </ul>
            </li>
            <li>Item 1.3</li>
        </ul>
    </li>
    <li>Item 2</li>
</ul>

我怎样才能用百里香做到这一点?如果我必须使用的话我很容易其他技术像瓷砖、布局或其他任何东西。

编辑:我尝试参数化包含/替换但没有运气。传递的参数将转换为字符串,并且不能用于另一级递归。看https://github.com/ultraq/thymeleaf-layout-dialect/issues/12

非常感谢,

Frank


尝试这个:

为单个菜单项创建一个片段,如下所示menuFragment.html

<html>
    <section layout:fragment="menu">
        <ul>
            <li th:each="menuItem : ${menuItemsList}" th:text="${menuItem.name}">
                <section layout:include="@{path/to/folder/menuFragment} :: menu" th:with="menuItemsList=${menuItem.children}"></section>
            </li>
        </ul> 
    </section>
</html>

将片段包含在菜单文件中,如下所示

<section layout:include="@{path/to/folder/menuFragment} :: menu" th:with="menuItemsList=${rootMenuItemAsList}"></section>

rootMenuItemAsList是包含您的父菜单的列表

希望这对你有帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 thymeleaf 递归渲染菜单 的相关文章

随机推荐

  • MKMapView 是否存在泄漏

    以及我的问题 删除MKMapView注释会导致泄漏 我发现 如果您创建基于视图的项目 请添加UISearchBar and MKMapView进入视图的 NIB 连接委托 我没有创建任何方法 因为我们实际上不需要做任何事情来触发泄漏 链接到
  • “所有人”或“只有我”是 Windows 安装程序包的默认选项吗?

    微软有一篇文章 http support microsoft com kb 835460 其中解释了如何使用 Orca 数据库编辑器从使用 Visual Studio NET 创建的 Windows Installer 包中删除 Every
  • 为什么我需要为一个简单的 Flask 应用程序使用 Web 服务器、中间件等? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我一直在开发一个简单的 MVP 应用程序 现在是将其部署到我的生产服务器以进行更彻底的外部测试 它永远不会获得繁重的流量负载 这只是我需要一小群用户来测试的东西 现在我总是选择三层 N
  • 如何使用 Jackson 注释将嵌套值映射到属性?

    假设我正在调用一个 API 该 API 使用以下产品 JSON 进行响应 id 123 name The Best Product brand id 234 name ACME Products 我可以使用 Jackson 注释来映射产品
  • GitHub Actions:每个步骤都必须定义“uses”或“run”键

    我想设置 github 操作 调用 nuget 并缓存它 构建解决方案 运行单元测试 我设法让第二步和第三步正常工作 但现在将第一步结合起来是一个问题 name Cache Nuget uses actions cache v1 with
  • 如何使用 SpaCy 中的管道组件修改 spacy.tokens.doc.Doc 令牌

    我正在使用 SpaCy 预处理一些数据 但是 我对如何修改内容感到困惑spacy tokens doc Doc class 例如 这里 npc spacy load pt def pre process text doc gt str ne
  • NSPredicate 子查询语法

    我有一些不友好的字典数组 这些字典数组又包含数据数组 我试图根据传递谓词的任何内部数组来过滤外部数组 我似乎无法创建 NSPredicate 来完成这项工作 我从以下开始 NSPredicate lookupPredicate NSPred
  • SQL-列中的相似数据

    有什么办法可以在列中找到类似的结果 例子 我希望从没有 4 棵绿树的表数据中查询返回 因为没有与绿树相似的数据 但蓝色汽车与蓝色汽车相似 红色娃娃与红色娃娃相似 这个怎么做 我使用微软sql server管理工作室 你可以使用SOUNDEX
  • 如何在 2x2 网格上绘制多个 seaborn catplot?

    我尝试使用 FacetGrid 绘制 2x2 网格 每个子图都是相同数据的猫图 但只是具有不同的 抖动 值 它没有起作用 这是我现在使用的代码 sns catplot x Sex y SidestepDist jitter False da
  • 如何合并 Flex Datagrid 中的单元格?

    有没有办法在数据网格中合并单元格 垂直和 或水平 例如 至少有一种方法可以显示某些数据网格列属于一组 例如 我将采用三列 column1 column2 column3 所有这三个单元格都应分组到行距为 3 的 类别 单元格中 如果您愿意的
  • 在ggmap中对图例顺序进行排序

    如何对 ggmap 中的图例顺序进行排序 我有以下代码 mymap lt ggmap map geom point data mypoints aes x lon y lat colour month alpha 0 5 size 5 我希
  • 如何在特定坐标处将完整的 JTable 组件导出为 pdf

    在我的项目中 我必须以 pdf 格式打印 JTable 组件以及所有自定义项 如边框 颜色等 对于这个要求 我搜索了一下 找到了一个在 pdf 中打印 JTable 的代码 但打印后我发现表格的第一行和第一列的边框丢失了 而且我没有找到在某
  • Rail 4 中的批量分配受保护属性

    我收到错误消息警告 无法批量分配受保护的属性 有一种方法 强参数可以解决问题 但是失败了 我不想做attr accessible title description在每个模型中 我宁愿使用 Strong 参数 我在代码中使用 group p
  • Python 按标签和属性递归对 XML 元素进行排序

    我是 Python 新手 我正在尝试使用一些规则对 XML 进行排序 我的例子
  • 创建图像对象数组

    我正在尝试创建一系列图像对象 但很困难 每个对象将包含一个图像和图像的标题 当我将以下代码粘贴到 Firebug 中进行检查时 它工作正常 实施例1 var imageArray new Array imageArray 0 new Ima
  • 使用 REGEX 用可变长度零填充数字

    我遇到一种情况 客户端输入一个数字 我需要通过在其前面填充一定数量的零来验证该数字 我验证的字段的最大长度是 9 位数字 因此如果客户端输入 123 我需要在其前面填充 6 个零并进行验证 听起来很容易 对吧 好吧 这是最关键的 我对过程的
  • Codeigniter 连接模型中的两个表

    我想在我的模型中加入 2 个表 但它不起作用 这是我现在的模型 function list get id this gt load gt database query this gt db gt get where lists array
  • 如何使用 GET/POST 和 Token key 基于 Ajax 调用 ASP.NET Web API

    我知道如何将 Ajax 与 GET POST 数据一起使用 如下代码所示 但我不知道如何将其与 Token key 一起使用 已获得 Token key read1 click function support cors true ajax
  • C++ 未声明的标识符错误

    我得到一个未声明的标识符错误 我不知道为什么 我什至重写了完整的内容以确保我没有犯错 有人能告诉我为什么会出现这个错误吗 我的文件是 连接 hpp pragma once include LogicSimulator hpp include
  • 如何使用 thymeleaf 递归渲染菜单

    我想使用 ul li 列表呈现 HTML 菜单 我有这个类结构 public class MenuItem private String name private MenuItem parent private List