樹形遞歸這中需求,雖然在系統中不是出現頻率很高的功能,可是倒是大多數系統,又比不可少的一個內容。最近在研究和使用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)"/>