Java多级菜单结构
Posted
技术标签:
【中文标题】Java多级菜单结构【英文标题】:Java multilevel menu structure 【发布时间】:2011-10-29 17:00:19 【问题描述】:我正在用 Java (Tapestry 5) 构建一个 Web 应用程序。 我想创建一个多级菜单,我可以在其中显示根元素,例如在我的页面顶部和左侧选定的子元素。
为了实现这一点,我想使用这样的树结构:
public class SiteMap
private List<MenuItem> root;
public class MenuItem
private String pageFileName;
private String pageNavigationName;
private List<MenuItem> children;
private MenuItem parent;
public MenuItem(String pageFileName, String pageNavigationName, MenuItem parent)
this.pageFileName = pageFileName;
this.pageNavigationName = pageNavigationName;
this.parent = parent;
public String getPageFileName()
return pageFileName;
public String getPageNavigationName()
return pageNavigationName;
public List<MenuItem> getChildren()
return children;
public MenuItem getParent()
return this.parent;
现在,如果我想基于树中某处的 1 个父项的子项(只有 pageFileName - String)构建一个菜单,该怎么办。我必须递归遍历树才能根据 pageFileName (String) 找到这个父项,这似乎不是一个好方法。
这是(使用树形结构)实现它的正确方法吗?还是有更好的选择? 感谢任何想法和提示!
提前致谢!
内森
【问题讨论】:
【参考方案1】:MenuItem root = null;
MenuItem curr = myMenuItem;
while(curr.getParent() != null)
curr = curr.getParent();
root = curr;
这样做并没有错,代码会运行得非常快,尤其是因为您不会有数百万个菜单条目。
【讨论】:
您好,感谢您的回答。这里的问题是,我没有“curr”作为 MenuItem 数据类型,而只是作为字符串(页面文件的名称)。所以我必须递归地(?)使用这个 pageFileName 在树中搜索正确的父级。 好吧,我理解错了,也许只是添加一个 HashMap为什么不对父项和子项都使用 MenuItem 并保留每个子项对其父项的引用?
List<MenuItem> children; // empty/null for leaf nodes
MenuItem parent; // null for root nodes
【讨论】:
是的,很抱歉应该是这样(我的错)。但是在我的 web 应用程序中构建菜单时,我必须根据父 pageFileName (String) 找到子级。所以我必须遍历树才能找到我猜的这个父项? 我按照我的意思更新了我的代码,很抱歉造成混淆。 (与旧代码混淆)以上是关于Java多级菜单结构的主要内容,如果未能解决你的问题,请参考以下文章