Java多级菜单结构
我正在用Java(Tapestry 5)构建一个web应用程序。 我想创建一个多级菜单,在这里我可以显示根元素,例如在我的页面顶部,在左侧显示所选元素的子元素 为了实现这一点,我考虑使用如下树结构:Java多级菜单结构,java,tree,navigation,Java,Tree,Navigation,我正在用Java(Tapestry 5)构建一个web应用程序。 我想创建一个多级菜单,在这里我可以显示根元素,例如在我的页面顶部,在左侧显示所选元素的子元素 为了实现这一点,我考虑使用如下树结构: public class SiteMap { private List<MenuItem> root; public class MenuItem { private String pageFileName; private String pageNavigatio
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;
}
}
}
公共类站点地图{
私有列表根;
公共类菜单项{
私有字符串页面文件名;
私有字符串pageNavigationName;
私人名单儿童;
私有菜单项父项;
公共菜单项(字符串pageFileName、字符串pageNavigationName、菜单项父项){
this.pageFileName=页面文件名;
this.pageNavigationName=pageNavigationName;
this.parent=parent;
}
公共字符串getPageFileName(){
返回页面文件名;
}
公共字符串getPageNavigationName(){
返回pageNavigationName;
}
公共列表getChildren(){
返回儿童;
}
公共菜单项getParent(){
将此文件返回给父对象;
}
}
}
现在,如果我想基于树中某个父项的子项(只有pageFileName-String)构建一个菜单,该怎么办。我必须递归遍历树才能根据pageFileName(字符串)找到父项,这似乎不是一个好方法
这(使用树结构)是实现这一点的正确方法吗?还是有更好的选择?
任何想法和提示都将不胜感激
提前谢谢
Nathan为什么不为父母和子女使用MenuItem,并保留每个子女对其父母的引用
List<MenuItem> children; // empty/null for leaf nodes
MenuItem parent; // null for root nodes
列出子项;//叶节点为空/空
菜单项父项;//根节点为null
这样做没有错,代码运行速度非常快,特别是因为你不会有数百万个菜单项。是的,很抱歉应该是这样(我的错)。但是,在我的Web应用程序中构建菜单时,我必须根据父页面文件名(字符串)查找子菜单。因此,我必须在树中循环查找父项,我猜?我按照我的意思更新了我的代码,很抱歉造成混淆。(与旧代码混淆)嘿,谢谢你的回答。这里的问题是,我没有将“curr”作为MenuItem数据类型,而是作为字符串(页面文件的名称)。因此,我必须递归地(?)在树中搜索具有此pageFileName的正确父级。好吧,我误解了,也许只是添加一个HashMap以快速查找。
MenuItem root = null;
MenuItem curr = myMenuItem;
while(curr.getParent() != null) {
curr = curr.getParent();
}
root = curr;