thymeleaf模板的树形递归

树形递归这中需求,虽然在系统中不是出现频率很高的功能,可是倒是大多数系统,又比不可少的一个内容。最近在研究和使用thymeleaf这个模板引擎,发现是真的好用,比原来的jsp和freemark的功能强大使用有又比较轻,特别是他是真正能够作到脱离后台程序开发的页面原型的模板引擎。 好了,说了这么多也就是想然你对这个东西产生一点兴趣。像在页面现实树形菜单这个需求,我竟然在百度里面,没有百度出别人分享的案例(ps多是我百度的水平太low了吧。。。。)。因此,没办法,只好本身研究了。less

下面是我研究出来的成果。主要是使用到了thymeleaf的fragment功能。jsp

其余的也很少说,只贴代码,剩余的能够自行研究:ui

主体部分:this

<table class="layui-table">
    <colgroup>
      <col width="200">
      <col width="150">
      <col width="150">
      <col width="150">
      <col width="150">
      <col width="150">
      <col width="150">
      <col>
    </colgroup>
    <thead>
        <tr>
          <th>名称</th>
          <th>标识</th>
          <th>类型</th>
          <th>权限资源</th>
          <th>描述</th>
          <th>状态</th>
          <th>排序</th>
          <th style="text-align: center;">操做</th>
        </tr>
    </thead>
    <tbody th:include="this::row(${permissions},1)"/>
</table>

模板递归部分url

<!--局部模板-->
<th:block th:fragment="row(permissions,lv)">
  <th:block th:each="p : ${permissions}">
    <tr>
      <td th:text="${p.name}" th:style="|padding-left:${15*lv}px|">名称</td>
      <td th:text="${p.key}">标识</td>
      <td th:text="${p.type.display}">权限类型</td>
      <td th:text="${p.url}">权限资源</td>
      <td th:text="${p.description}">描述</td>
      <td th:text="${p.enable?'可用':'禁用'}">是否启用</td>
      <td th:text="${p.weight}">权重</td>
      <td style="text-align: center;">
        <div class="layui-btn-group">
          <a class="layui-btn layui-btn-mini"><i class="layui-icon"></i></a>
          <a class="layui-btn layui-btn-danger layui-btn-mini"><i class="layui-icon"></i></a>
        </div>
      </td>
    </tr>
    <th:block th:unless="${#lists.isEmpty(p.children)}" th:include="this::row(${p.children},${lv+1})"/>
  </th:block>
</th:block>

注意两个地方: 此处是调用片断,下面就是定义片断。lists.isEmpty(p.children)就是判断是否须要递归code

<tbody th:include="this::row(${permissions},1)"/>
相关文章
相关标签/搜索