多くのナビゲーション メニューはツリー状になっており、レベルごとに分割されているため、確実に再帰的に処理する必要があります。
Freemarker の場合、マクロはシグネチャとパラメータ リストを定義する関数に相当します。
そのため、フリーマーカーページでは次のように記述する必要があります:
<#macro menuTree menus> <#if menus?? && menus?size gt 0> <#list menus as menu> <tr> <td> <input type="checkbox" name="ids" value="${menu.id}" /> </td> <td> <span title="${menu.name!}" style="margin-left: ${menu.leaf * 30}px;[#if menu.leaf == 0] color: #000000;[/#if]"> ${menu.menuName!} </span> </td> <td> ${menu.url!} </td> <td> ${menu.permissionText!} </td> <td> ${menu.sortNo!} </td> <td> <a href="edit.jhtml?id=${menu.id}">[编辑]</a> </td> </tr> <#if menu.menuBeans?? && menu.menuBeans?size gt 0> <@menuTree menus = menu.menuBeans/> </#if> </#list> </#if> </#macro> <!-- 调用宏 生成递归树 --> <@menuTree menus = dto />
バックエンドデータ:
[ { "id": 1, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "系统管理", "menuType": 1, "parentId": null, "iconcls": null, "url": null, "expand": null, "sortNo": null, "permission": null, "moduleId": 1, "parentName": null, "leaf": 0, "typeName": null, "permissionText": null, "menuBeans": [ { "id": 7, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "模块管理", "menuType": 1, "parentId": 1, "iconcls": null, "url": "/module/list", "expand": null, "sortNo": null, "permission": null, "moduleId": 1, "parentName": null, "leaf": 1, "typeName": null, "permissionText": null, "menuBeans": null }, { "id": 3, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "菜单管理", "menuType": 1, "parentId": 1, "iconcls": null, "url": "/menu/list", "expand": null, "sortNo": null, "permission": "admin:add", "moduleId": 1, "parentName": null, "leaf": 1, "typeName": null, "permissionText": null, "menuBeans": null } ] }, { "id": 2, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "用户管理", "menuType": 1, "parentId": null, "iconcls": null, "url": null, "expand": null, "sortNo": null, "permission": null, "moduleId": 1, "parentName": null, "leaf": 0, "typeName": null, "permissionText": null, "menuBeans": [ { "id": 9, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "供应商管理", "menuType": 1, "parentId": 2, "iconcls": null, "url": null, "expand": null, "sortNo": null, "permission": null, "moduleId": 1, "parentName": null, "leaf": 1, "typeName": null, "permissionText": null, "menuBeans": null }, { "id": 8, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "部门管理", "menuType": 1, "parentId": 2, "iconcls": null, "url": null, "expand": null, "sortNo": null, "permission": null, "moduleId": 1, "parentName": null, "leaf": 1, "typeName": null, "permissionText": null, "menuBeans": null }, { "id": 6, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "权限管理", "menuType": 1, "parentId": 2, "iconcls": null, "url": "/user/list-6", "expand": null, "sortNo": null, "permission": null, "moduleId": 1, "parentName": null, "leaf": 1, "typeName": null, "permissionText": null, "menuBeans": null }, { "id": 5, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "角色管理", "menuType": 1, "parentId": 2, "iconcls": null, "url": "/user/list-5", "expand": null, "sortNo": null, "permission": null, "moduleId": 1, "parentName": null, "leaf": 1, "typeName": null, "permissionText": null, "menuBeans": null }, { "id": 4, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "分销商管理", "menuType": 1, "parentId": 2, "iconcls": null, "url": "/user/add-4", "expand": null, "sortNo": null, "permission": null, "moduleId": 1, "parentName": null, "leaf": 1, "typeName": null, "permissionText": null, "menuBeans": null }, { "id": 10, "enable": true, "remark": null, "createBy": 1, "createTime": 1503546411000, "updateBy": 1, "updateTime": 1503546415000, "keyword": null, "menuName": "员工管理", "menuType": 1, "parentId": 2, "iconcls": null, "url": null, "expand": null, "sortNo": null, "permission": null, "moduleId": 1, "parentName": null, "leaf": 1, "typeName": null, "permissionText": null, "menuBeans": null } ] } ]
以上がFreemarker がツリー ナビゲーション メニューを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。