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谢谢你的回答,但不幸的是,我无法调试和逐步完成代码。