Struts-Menu是一个用来生成页面导航菜单的标签库,需要Struts的支持。用来存放父子关系等数据比较方便。实例:
public static void main(String[] args){
test2();
}
public static void test2(){
MenuRepository rep = new MenuRepository();
MenuComponent menu0 = new MenuComponent();
menu0.setName("n0") ;
menu0.setTitle("t0") ;
rep.addMenu(menu0);
for(int i = 1; i < 5; i++){
// 构建菜单
MenuComponent menu = new MenuComponent();
menu.setName("n" + i) ;
menu.setTitle("t" + i) ;
menu.setParent(rep.getMenu("n0"));
rep.addMenu(menu);
}
MenuComponent[] childs = menu0.getMenuComponents();
for(MenuComponent tmp : childs){
MenuComponent m = rep.getMenu(tmp.getName());
// System.out.println("--before remove n1--"+m);
if(m != null){
System.out.println("--before remove n1--"+m.getName());
}
}
//移除
rep.removeMenu("n1");
childs = menu0.getMenuComponents();
for(MenuComponent tmp : childs){
MenuComponent m = rep.getMenu(tmp.getName());
// System.out.println("--after remove n1--"+m);
if(m != null){
System.out.println("--after remove n1--"+m.getName());
}
}
}
MenuRepository.removeMenu(string);方法源码存在BUG,如下:
> Moved from SourceForge
> http://sourceforge.net/tracker/index.php?func=detail&aid=1121232&group_id=48726&atid=453974:
> Currently, removeMenu in the class MenuRepository does
> not remove the MenuComponent because it is making a
> call to Map.remove(MenuComponent) instead of
> Map.remove(String) where String is a key in the Map.
> Current code:
> /**
> * Allows easy removal of a menu by its name.
> * @param name
> */
> public void removeMenu(String name) {
> if (menus.containsKey(name)) {
> menus.remove(getMenu
> (name));
> }
> }
> Fixed code:
> /**
> * Allows easy removal of a menu by its name.
> * @param name
> */
> public void removeMenu(String name) {
> menus.remove(name);
> }