Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构建<;ul>;递归列表_Java_Jsp_Recursion - Fatal编程技术网

Java 构建<;ul>;递归列表

Java 构建<;ul>;递归列表,java,jsp,recursion,Java,Jsp,Recursion,所以,我有这个网站结构 Page 1 Page 1.1 Page 2 Page 2.1 Page 2.1.1 Page 2.2 Page 3 Page 3.1 Page 3.2 Page 4 我想使用递归函数构建列表。我的函数如下所示 public String getMenu(Page rootPage, boolean base){ final Logger log = LoggerFactory.getLogger(this.getClass());

所以,我有这个网站结构

Page 1
  Page 1.1
Page 2
  Page 2.1
    Page 2.1.1
  Page 2.2
Page 3
  Page 3.1
  Page 3.2
Page 4
我想使用递归函数构建
列表。我的函数如下所示

public String getMenu(Page rootPage, boolean base){
    final Logger log = LoggerFactory.getLogger(this.getClass());
    Iterator<Page> subPages = rootPage.listChildren();
    StringBuilder output = new StringBuilder("<ul");
        output.append(" id=\"drop-menu\"");
    output.append(" class=\"popup-menu\">");
    if(!base){
        output.append("<li><a href=\"").append(rootPage.getPath()).append(".html\" class=\"showSubPage\" rel=\"").append(rootPage.getPath()).append("\">");
        String title = rootPage.getPageTitle() == null ? rootPage.getTitle() : rootPage.getPageTitle();
        output.append(title);
        output.append("</a>");
        output.append("</li>");
        output.append("</ul>");
    }
    while(subPages.hasNext()){
        output.append("<ul>");
        log.info("som subpages here!");
        Page curPage = subPages.next();
        output.append("<li><a href=\"").append(curPage.getPath()).append(".html\" class=\"showSubPage\" rel=\"").append(curPage.getPath()).append("\">");
        String title = curPage.getPageTitle() == null ? curPage.getTitle() : curPage.getPageTitle();
        output.append(title);
        output.append("</a>");
        Iterator<Page> subSub = curPage.listChildren();
        int tmpCtr = 0;
        while(subSub.hasNext()){
            tmpCtr++;
            output.append(getMenu(subSub.next(), false));
        }
        output.append("</li>");
        output.append("</ul>");
    }
    return output.toString();
}
<ul id="drop-menu" class="popup-menu">
    <ul>
        <li><a href="/menu-hier/afsafa.html" class="showSubPage" >Page 1</a>
            <ul id="drop-menu" class="popup-menu">
                <li><a href="/menu-hier/afsafa/sdgsdgdsf.html" class="showSubPage" rel="/menu-hier/afsafa/sdgsdgdsf">Page 1.1</a>
                </li>
            </ul>
        </li>
    </ul>
    <ul>
        <li><a href="/menu-hier/fdsafdsafas.html" class="showSubPage" rel="/menu-hier/fdsafdsafas">Page 2</a>
            <ul id="drop-menu" class="popup-menu">
                <li><a href="/menu-hier/fdsafdsafas/sdfgdsgsdg.html" class="showSubPage" rel="/menu-hier/fdsafdsafas/sdfgdsgsdg">Page 2.1</a>
                </li>
            </ul>
            <ul>
                <li><a href="/menu-hier/fdsafdsafas/sdfgdsgsdg/dsgsdgdsgfd.html" class="showSubPage" rel="/menu-hier/fdsafdsafas/sdfgdsgsdg/dsgsdgdsgfd">Page 2.1.1</a>
                </li>
            </ul>
            <ul id="drop-menu" class="popup-menu">
                <li><a href="/menu-hier/fdsafdsafas/fsdgdsfgsdgfs.html" class="showSubPage" rel="/menu-hier/fdsafdsafas/fsdgdsfgsdgfs">Page 2.2</a>
                </li>
            </ul>
        </li>
    </ul>
    <ul>
        <li><a href="/menu-hier/fgdsgfsdgdsfgsdg.html" class="showSubPage" rel="/menu-hier/fgdsgfsdgdsfgsdg">Page 3</a>
            <ul id="drop-menu" class="popup-menu">
                <li><a href="/menu-hier/fgdsgfsdgdsfgsdg/fsafsdafas.html" class="showSubPage" rel="/menu-hier/fgdsgfsdgdsfgsdg/fsafsdafas">Page 3.1</a>
                </li>
            </ul>
            <ul id="drop-menu" class="popup-menu">
                <li><a href="/menu-hier/fgdsgfsdgdsfgsdg/yxvcxyvvyxcv.html" class="showSubPage" rel="/menu-hier/fgdsgfsdgdsfgsdg/yxvcxyvvyxcv">Page 3.2</a>
                </li>
            </ul>
            <ul id="drop-menu" class="popup-menu">
                <li><a href="/menu-hier/fgdsgfsdgdsfgsdg/yxvcxyv.html" class="showSubPage" rel="/menu-hier/fgdsgfsdgdsfgsdg/yxvcxyv">Page 3.3</a>
                </li>
            </ul>
        </li>
    </ul>
    <ul>
        <li><a href="/menu-hier/dsfgsdfgdsfg.html" class="showSubPage" rel="/menu-hier/dsfgsdfgdsfg">Page 4</a>
        </li>
    </ul>
publicstringgetmenu(页面根页面,布尔基){
最终记录器日志=LoggerFactory.getLogger(this.getClass());
迭代器子页面=rootPage.listChildren();
StringBuilder输出=新StringBuilder(“”);
如果(!base){
输出。追加(
  • ); 输出。追加(“
  • ”); 输出。追加(“”); } while(子页面.hasNext()){ 输出。追加(“
      ”); log.info(“这里是som子页面!”); Page curPage=子页面.next(); 输出。追加(
    • ); 迭代器subSub=curPage.listChildren(); int-tmpCtr=0; while(subSub.hasNext()){ tmpCtr++; append(getMenu(subSub.next(),false)); } 输出。追加(“
    • ”); 输出。追加(“
    ”); } 返回output.toString(); }
    输出结果如下所示

    public String getMenu(Page rootPage, boolean base){
        final Logger log = LoggerFactory.getLogger(this.getClass());
        Iterator<Page> subPages = rootPage.listChildren();
        StringBuilder output = new StringBuilder("<ul");
            output.append(" id=\"drop-menu\"");
        output.append(" class=\"popup-menu\">");
        if(!base){
            output.append("<li><a href=\"").append(rootPage.getPath()).append(".html\" class=\"showSubPage\" rel=\"").append(rootPage.getPath()).append("\">");
            String title = rootPage.getPageTitle() == null ? rootPage.getTitle() : rootPage.getPageTitle();
            output.append(title);
            output.append("</a>");
            output.append("</li>");
            output.append("</ul>");
        }
        while(subPages.hasNext()){
            output.append("<ul>");
            log.info("som subpages here!");
            Page curPage = subPages.next();
            output.append("<li><a href=\"").append(curPage.getPath()).append(".html\" class=\"showSubPage\" rel=\"").append(curPage.getPath()).append("\">");
            String title = curPage.getPageTitle() == null ? curPage.getTitle() : curPage.getPageTitle();
            output.append(title);
            output.append("</a>");
            Iterator<Page> subSub = curPage.listChildren();
            int tmpCtr = 0;
            while(subSub.hasNext()){
                tmpCtr++;
                output.append(getMenu(subSub.next(), false));
            }
            output.append("</li>");
            output.append("</ul>");
        }
        return output.toString();
    }
    
    <ul id="drop-menu" class="popup-menu">
        <ul>
            <li><a href="/menu-hier/afsafa.html" class="showSubPage" >Page 1</a>
                <ul id="drop-menu" class="popup-menu">
                    <li><a href="/menu-hier/afsafa/sdgsdgdsf.html" class="showSubPage" rel="/menu-hier/afsafa/sdgsdgdsf">Page 1.1</a>
                    </li>
                </ul>
            </li>
        </ul>
        <ul>
            <li><a href="/menu-hier/fdsafdsafas.html" class="showSubPage" rel="/menu-hier/fdsafdsafas">Page 2</a>
                <ul id="drop-menu" class="popup-menu">
                    <li><a href="/menu-hier/fdsafdsafas/sdfgdsgsdg.html" class="showSubPage" rel="/menu-hier/fdsafdsafas/sdfgdsgsdg">Page 2.1</a>
                    </li>
                </ul>
                <ul>
                    <li><a href="/menu-hier/fdsafdsafas/sdfgdsgsdg/dsgsdgdsgfd.html" class="showSubPage" rel="/menu-hier/fdsafdsafas/sdfgdsgsdg/dsgsdgdsgfd">Page 2.1.1</a>
                    </li>
                </ul>
                <ul id="drop-menu" class="popup-menu">
                    <li><a href="/menu-hier/fdsafdsafas/fsdgdsfgsdgfs.html" class="showSubPage" rel="/menu-hier/fdsafdsafas/fsdgdsfgsdgfs">Page 2.2</a>
                    </li>
                </ul>
            </li>
        </ul>
        <ul>
            <li><a href="/menu-hier/fgdsgfsdgdsfgsdg.html" class="showSubPage" rel="/menu-hier/fgdsgfsdgdsfgsdg">Page 3</a>
                <ul id="drop-menu" class="popup-menu">
                    <li><a href="/menu-hier/fgdsgfsdgdsfgsdg/fsafsdafas.html" class="showSubPage" rel="/menu-hier/fgdsgfsdgdsfgsdg/fsafsdafas">Page 3.1</a>
                    </li>
                </ul>
                <ul id="drop-menu" class="popup-menu">
                    <li><a href="/menu-hier/fgdsgfsdgdsfgsdg/yxvcxyvvyxcv.html" class="showSubPage" rel="/menu-hier/fgdsgfsdgdsfgsdg/yxvcxyvvyxcv">Page 3.2</a>
                    </li>
                </ul>
                <ul id="drop-menu" class="popup-menu">
                    <li><a href="/menu-hier/fgdsgfsdgdsfgsdg/yxvcxyv.html" class="showSubPage" rel="/menu-hier/fgdsgfsdgdsfgsdg/yxvcxyv">Page 3.3</a>
                    </li>
                </ul>
            </li>
        </ul>
        <ul>
            <li><a href="/menu-hier/dsfgsdfgdsfg.html" class="showSubPage" rel="/menu-hier/dsfgsdfgdsfg">Page 4</a>
            </li>
        </ul>
    
    所以问题是,3级页面没有正确放置。例如,第2.1.1页不在第2.1页部分下


    谢谢你的帮助

    不确定您希望HTML的外观,但是:

    1) 从您的代码中,为子页面插入两次
    标记(一次在while循环中,然后再次在递归调用的getMenu()中)

    2) 我认为,您缺少了
  • 标签下面的
    标签

    3) 您的代码看起来非常冗余和复杂,难道不能像这样轻松地完成(未经测试):

    publicstringgetmenu(Page,booleanisroot){
    StringBuilder输出=新的StringBuilder();
    if(isRoot){
    append(“”);
    }
    否则{
    输出。追加(“
      ”); } 输出。追加(
    • ); 迭代器子页面=page.listChildren(); while(子页面.hasNext()){ append(getMenu(subpage.next(),false)); } 输出。追加(“
    • ”); 输出。追加(“
    ”); 返回output.toString(); }
    您是否尝试过调试代码并逐行检查每一行以了解其行为方式。这样你会学到很多东西。@SimonArsenault谢谢你的回答,但不幸的是,我无法调试和逐步完成代码。