Java多级菜单结构

时间:2011-08-18 11:14:26

标签: java tree navigation

我正在使用Java构建Web应用程序(Tapestry 5)。 我想创建一个多级菜单,我可以在其中显示根元素,例如在页面顶部和左侧所选子项。

为了实现这一点,我想使用这样的树结构:

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)找到这个父项,这似乎不是一个好方法。

这是(使用树结构)正确的方法来实现这个吗?或者有更好的选择吗? 任何想法和提示都表示赞赏!

提前致谢!

2 个答案:

答案 0 :(得分:0)

为什么不将MenuItem用于父级和子级,并保留每个子级对其父级的引用?

List<MenuItem> children; // empty/null for leaf nodes
MenuItem parent; // null for root nodes

答案 1 :(得分:0)

MenuItem root = null;
MenuItem curr = myMenuItem;
while(curr.getParent() != null) {
    curr = curr.getParent(); 
}
root = curr;

这样做是没有错的,代码将运行得非常快,特别是因为你不会有数百万的菜单条目。