Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 编程p:menu越来越频繁地执行actionexpression_Jsf_Dynamic_Menu_Primefaces - Fatal编程技术网

Jsf 编程p:menu越来越频繁地执行actionexpression

Jsf 编程p:menu越来越频繁地执行actionexpression,jsf,dynamic,menu,primefaces,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 =

我有一个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...
}
@ManagedBean
@会议范围
公共类ItemController实现可序列化{
私有列表项;//项列表(字符串,id)
私有菜单模型;
公共void加载菜单(){
模型=新的DefaultMenuModel();
ELContext elCtx=FacesContext.getCurrentInstance().getELContext();
ExpressionFactory expFact=FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
子菜单子菜单=新建子菜单();
setLabel(“您的项目:”);
对于(int i=0;i
但每次单击菜单项时,“loadItem(intid)”方法的执行频率比上次单击的频率高一倍

例如,记录器打印:

  • 第一次单击时:“执行1”
  • 第二次单击时(同一菜单项):“已执行1”“已执行1”
  • 第三次单击时(同一菜单项):“已执行1”“已执行1”“已执行1”
  • 等等
当我让页面重新加载URL时,它会重置并重新开始。刷新不会改变任何东西,当我手动创建相同的菜单时,它可以完美地工作。是虫子吗


有人能帮忙吗?我不知道是什么让菜单项变成这样。

哪个JSF impl/版本?试过最新的吗?嗨,我正在使用JSF2.0;ApacheMyFacesAPI 2.0.2这是规范版本。我问的是哪个JSF impl(Mojarra或MyFaces)及其版本(Mojarra当前为2.1.22,MyFaces当前为2.1.12)。编辑:好的,这就是MyFaces2.0.2。那是非常古老的(超过3.5岁)。请尝试最新版本,以排除由MyFaces的某些bug引起的行为,这些bug已经修复了很长时间。