0

我有一个 bean,它有一个项目列表,并且创建了一次菜单模型:

@ManagedBean
@SessionScoped
public class ItemController implements Serializable{

    private List<Item> items; //list of items (String, id)
    private MenuModel model;

    public void loadMenu(){
        model = new DefaultMenuModel();
        ELContext elCtx = FacesContext.getCurrentInstance().getELContext();
        ExpressionFactory expFact = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();

        Submenu submenu = new Submenu();
        submenu.setLabel("Your items:");
        for(int i = 0; i < items.size(); i++){
            MenuItem item = new MenuItem();
            item.setId("lm" + items.get(i).getId());
            item.setValue(items.get(i).getName());
            item.setAjax(false); //sonst setupdate setzen!
            item.setActionExpression(expFact.createMethodExpression(elCtx, "#{itemController.loadItem("+items.get(i).getId()+")}", Void.class, new Class[]{Integer.class}));
            submenu.getChildren().add(item);
        }
        model.addSubmenu(submenu);
    }
    public void loadItem(int id){
        System.out.println("EXECUTED: " + id);
    }
    // ...getters and setters here...
}

但是每次我点击一个菜单项时,“loadItem(int id)”方法的执行次数比上次点击的次数多。

例如,记录器打印:

  • 第一次点击:“执行 1”
  • 第二次点击(相同的菜单项):“EXECUTED 1”“EXECUTED 1”
  • 第三次点击(相同的菜单项):“EXECUTED 1”“EXECUTED 1”“EXECUTED 1”
  • 等等

当我让页面重新加载 URL 时,它会重置并重新开始。刷新不会改变任何东西,当我手动创建相同的菜单时,它可以完美运行。它是一个错误吗?

任何人都可以帮忙吗?我不知道是什么让菜单项像这样。

4

0 回答 0