thymeleaf 模板引擎 递归实现

设置数据源

将数据写入到 Model

	@RequestMapping("/menulist")
    public String MenuManagerList(Model model){
        List<MenuManagerDO> menuManagerList = menuManagerService.MenuManagerList();
        model.addAttribute("menuManagerList", menuManagerList);
        return "menulist";
    }

在html文件中设置html 头

<html xmlns:th="http://www.thymeleaf.org">

设置递归模板

<th:block th:fragment="row(menuManagers)">
		<ul th:each="menu,index:${menuManagers}">
			<li th:if="${#lists.isEmpty(menu.subMenuManager)}">
				<p th:text="${menu.menu_name}"></p>
			</li>
			<li th:if="not ${#lists.isEmpty(menu.subMenuManager)}" >
				<p th:text="${menu.menu_name}"></p>
				<th:block  th:include="this::row(${menu.subMenuManager})"></th:block>
			</li>
		</ul>
</th:block>

引用递归模板

<div th:include="this::row(${menuManagerList})"/>

整体模板代码

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title></title>
	<link rel="stylesheet" href="css/reset.css" />
	<link rel="stylesheet" href="css/login.css" />
        <script type="text/javascript" src="js/jquery.min.js"></script>
        <script type="text/javascript" src="js/login.js"></script>
</head>
<body>
	<div th:include="this::row(${menuManagerList})"/>
	<th:block th:fragment="row(menuManagers)">
		<ul th:each="menu,index:${menuManagers}">
			<li th:if="${#lists.isEmpty(menu.subMenuManager)}">
				<p th:text="${menu.menu_name}"></p>
			</li>
			<li th:if="not ${#lists.isEmpty(menu.subMenuManager)}" >
				<p th:text="${menu.menu_name}"></p>
				<th:block  th:include="this::row(${menu.subMenuManager})"></th:block>
			</li>
		</ul>
	</th:block>


</body>
</html>

列表呈现实体类

package com.demo.demoproject.pojo;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName : MenuManagerDO
 * @Description : 菜单管理
 * @Author : YWR
 * @Date: 2020-09-30 00:09
 */
public class MenuManagerDO {
    private Integer id;
    private Integer pid;
    private String menu_name;
    private List<MenuManagerDO> subMenuManager = new ArrayList<>();

    public List<MenuManagerDO> getSubMenuManager() {
        return subMenuManager;
    }

    public void setSubMenuManager(List<MenuManagerDO> subMenuManager) {
        this.subMenuManager = subMenuManager;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getPid() {
        return pid;
    }

    public void setPid(Integer pid) {
        this.pid = pid;
    }

    public String getMenu_name() {
        return menu_name;
    }

    public void setMenu_name(String menu_name) {
        this.menu_name = menu_name;
    }
}

mybaties Map xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.demoproject.mapper.MenuManager">
    <resultMap id="baseMenuManagerResultMap" type="com.demo.demoproject.pojo.MenuManagerDO">
        <id column="id" property="id" />
        <result column="pid" property="pid" />
        <result column="menu_name" property="menu_name"/>
        <collection property="subMenuManager" ofType="com.demo.demoproject.pojo.MenuManagerDO" column="{pid=id}" select="selectAll"/>
    </resultMap>
    <select id="selectAll" resultMap="baseMenuManagerResultMap">
            select  * from `menu_manager` where `pid` = #{pid}
    </select>
</mapper>

dao 接口

package com.demo.demoproject.mapper;

import com.demo.demoproject.pojo.MenuManagerDO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface MenuManager {
     List<MenuManagerDO> selectAll(@Param("pid") Integer pid);
}

数据表结构

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for menu_manager
-- ----------------------------
DROP TABLE IF EXISTS `menu_manager`;
CREATE TABLE `menu_manager`  (
  `id` int(11) NOT NULL,
  `menu_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `pid` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

测试数据结构

在这里插入图片描述

结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yweir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值