程序化p:菜单越来越频繁地执行动作表达

时间:2013-06-06 10:16:59

标签: jsf dynamic menu primefaces

我有一个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)”方法的执行次数比上次点击的次数多一次。

例如,记录器打印:

  • 首次点击:“EXECUTED 1”
  • 第二次点击
  • (同一菜单项):“EXECUTED 1”“EXECUTED 1”
  • 第三次点击
  • (同一菜单项):“EXECUTED 1”“EXECUTED 1”“EXECUTED 1”

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

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

0 个答案:

没有答案