在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  HTML/ java動(dòng)態(tài)生成菜單,jsp頁面有沒有什么好的遍歷方法

java動(dòng)態(tài)生成菜單,jsp頁面有沒有什么好的遍歷方法

jsp代碼如下,只遍歷到3級(jí),4567級(jí)要繼續(xù)遍歷下去重復(fù)代碼太多了,有沒有好的解決辦法?
沒有父級(jí)id是一級(jí)菜單,有父級(jí)id沒有url是有子菜單的二級(jí)菜單,以此類推

<c:forEach items="${menu }" var="target">

    <!-- 沒有parentId,有url的是一級(jí)菜單 -->
    <c:if test="${empty target.parentId  and !empty target.url }">
        <li><a href='<c:url value="${target.url }"></c:url>'> <i
                class="${target.icon }"></i>${target.name }
        </a></li>
    </c:if>
    <!-- 沒有parentId,也沒有url的菜單是有二級(jí)菜單的 -->
    <c:if test="${empty target.parentId  and empty target.url  }">
        <li><i class="${target.icon }"></i>${target.name }
            <ul>
                <c:forEach items="${target.childMenus }" var="childMenu">
                    <!-- 有url的沒有子菜單 -->
                    <c:if test="${!empty childMenu.url }">
                        <li><a href='<c:url value="${childMenu.url }"></c:url>'>
                                <i class="${childMenu.icon }"></i>${childMenu.name }
                        </a></li>
                    </c:if>
                    <!-- 三級(jí)菜單 -->
                    <c:if test="${empty childMenu.url }">
                        <i class="${childMenu.icon }"></i>${childMenu.name }
                        <ul>
                            <c:forEach items="${childMenu.childMenus }" var="thirdMenu">
                                <!-- 有url的沒有子菜單 -->
                                <c:if test="${!empty thirdMenu.url }">
                                    <li><a href='<c:url value="${thirdMenu.url }"></c:url>'>
                                            <i class="${thirdMenu.icon }"></i>${thirdMenu.name }
                                    </a></li>
                                </c:if>
                                <!-- 四級(jí)菜單 -->
                                <c:if test="${empty thirdMenu.url }">
                                    <c:forEach items="${thirdMenu.childMenus }" var="fourthMenu">
                                        <li>
                                            <a href='<c:url value="${fourthMenu.url }"></c:url>'>
                                                <i class="${fourthMenu.icon }"></i>${fourthMenu.name }
                                            </a>
                                        </li>
                                    </c:forEach>
                                </c:if>
                            </c:forEach>
                        </ul>
                    </c:if>
                </c:forEach>
            </ul>
        </li>
    </c:if>
</c:forEach>


菜單數(shù)據(jù):
Menu [id=1, name=Forms, parentId=, url=forms.html, icon=fa fa-edit, order=0, childMenus=null]
Menu [id=2, name=UI Elements, parentId=, url=, icon=fa fa-wrench, order=1, childMenus=[Menu [id=3, name=Buttons, parentId=2, url=buttons.html, icon=, order=0, childMenus=null], Menu [id=4, name=Icons, parentId=2, url=icons.html, icon=null, order=1, childMenus=null]]]
Menu [id=5, name=Multi-Level Dropdown, parentId=, url=, icon=fa fa-sitemap, order=2, childMenus=[Menu [id=6, name=Second Level Item, parentId=5, url=second.html, icon=null, order=0, childMenus=null], Menu [id=7, name=Third Level, parentId=5, url=null, icon=, order=1, childMenus=[Menu [id=8, name=Third Level Item, parentId=7, url=, icon=null, order=0, childMenus=[Menu [id=9, name=Fouth Level, parentId=8, url=fouth.html, icon=null, order=0, childMenus=null]]]]]]]

數(shù)據(jù)庫截圖:圖片描述

回答
編輯回答
維他命

先將數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)成樹形,形狀如:

[{
   id:1,children:[{id:2,children:[]}]
},
{
  id:3,children:[{id:4,children...}]}...
]

然后就可以用遞歸判斷構(gòu)建一個(gè)menu樹了,偽代碼如下:

buildTree(list){
  for(node in list){
     if(node.children){
         buildTree(node.children)
     }else{
         buildNode(node);
     }
  }
}
2017年7月3日 23:13
編輯回答
醉淸風(fēng)

用javascript

2018年6月12日 16:28
編輯回答
久礙你

用樹插件然后異步加載吧。這樣子做太麻煩了

2017年6月28日 02:43