嵌套的ul li标题菜单

时间:2017-07-19 06:54:54

标签: java html

我的项目中有一段代码,我想从包含菜单显示名称字符串的数据库表调用菜单,这是我的代码:

public static String subMenu(List<Menu> menus, String parentMenuId, boolean isSubMenu){
    StringBuilder sb = new StringBuilder();

    for(Menu menu : menus){         
        if(menu.getParentMenu()!=null && menu.getParentMenu().equalsIgnoreCase(parentMenuId)
                && menu.getActive() == Menu.MENU_ACTIVE){
            String menuId = menu.getMenuId();
            boolean isHasChild = false;

            for(Menu menuChild : menus){
                if(menuChild.getParentMenu()!=null && 
                        menuChild.getParentMenu().equalsIgnoreCase(menuId)){
                    isHasChild = true;
                }
            }

            sb.append("<ul>");
            if(isHasChild){
                sb.append("<li>")
                .append("<a href=\"#\">")
                .append(menu.getDisplayName())
                .append("</a>");
            }else{                  
                sb
                .append("<li>")
                .append("<a href=\""+ contextPath + menu.getActualUrl()+"\">")
                .append(menu.getDisplayName())
                .append("</a>")
                .append("</li>");
            }
            sb.append("</ul>");
        }
    }

    return sb.toString();
}

我不知道在哪里但是,我认为我在代码上放错了地方,所以输出就像这样

<ul>
<ul><li>...</li></ul>
<ul><li>...</li></ul>
<ul><li>...</li></ul>
</ul>

任何人都可以告诉我,并修复我的代码以获得这样的输出吗?

<ul>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>

提前感谢。

3 个答案:

答案 0 :(得分:0)

sb.append("<ul>");

sb.append("</ul>");

已从循环中移出:

  public static String subMenu(List<Menu> menus, String parentMenuId, boolean isSubMenu){
        StringBuilder sb = new StringBuilder();
        sb.append("<ul>");
        for(Menu menu : menus){         
            if(menu.getParentMenu()!=null && menu.getParentMenu().equalsIgnoreCase(parentMenuId)
                    && menu.getActive() == Menu.MENU_ACTIVE){
                String menuId = menu.getMenuId();
                boolean isHasChild = false;

                for(Menu menuChild : menus){
                    if(menuChild.getParentMenu()!=null && 
                            menuChild.getParentMenu().equalsIgnoreCase(menuId)){
                        isHasChild = true;
                    }
                }

                if(isHasChild){
                    sb.append("<li>")
                    .append("<a href=\"#\">")
                    .append(menu.getDisplayName())
                    .append("</a>");
                }else{                  
                    sb
                    .append("<li>")
                    .append("<a href=\""+ contextPath + menu.getActualUrl()+"\">")
                    .append(menu.getDisplayName())
                    .append("</a>")
                    .append("</li>");
                }
            }
        sb.append("</ul>");
        }

        return sb.toString();
    }

答案 1 :(得分:0)

我回答:

sb.append("<ul>")sb.append("</ul>")移到循环之外:

sb.append("<ul>");
for (Menu menu : menus) { ... }
sb.append("</ul>")

答案 2 :(得分:0)

你能尝试一下吗?

 public static String subMenu(List<Menu> menus, String parentMenuId, boolean isSubMenu){
StringBuilder sb = new StringBuilder();

for(Menu menu : menus){         
    if(menu.getParentMenu()!=null && menu.getParentMenu().equalsIgnoreCase(parentMenuId)
            && menu.getActive() == Menu.MENU_ACTIVE){
        String menuId = menu.getMenuId();
        boolean isHasChild = false;

        for(Menu menuChild : menus){
            if(menuChild.getParentMenu()!=null && 
                    menuChild.getParentMenu().equalsIgnoreCase(menuId)){
                isHasChild = true;
            }
        }

        if(isHasChild){
            sb.append("<li>")
            .append("<a href=\"#\">")
            .append(menu.getDisplayName())
            .append("</a>");
        }else{                  
            sb
            .append("<li>")
            .append("<a href=\""+ contextPath + menu.getActualUrl()+"\">")
            .append(menu.getDisplayName())
            .append("</a>")
            .append("</li>");
        }

    }
}

sb.insert(0, "<ul>");
sb.append("</ul>");
return sb.toString();

}