RichFaces a4j.jsFunction的奇怪行为

时间:2013-06-02 12:18:23

标签: jsf richfaces

我的问题很简单。我使用RichFaces 4.3.2 final并以编程方式动态panelMenu。我设法做到这一点,并使用setOnClick(“menuGroupAction('”+ labelOfGroup +“')”)到每个UIPanelMenuGroup和UIPanelMenuItem。 labelOfGroup因DB中的项目而异。 menuGroupAction是a4j:jsAction用作:

<h:form>
    <a4j:jsFunction name="menuGroupAction" actionListener="#{leftMenu.updateCurrent}" render=":contentForm:test" >
        <a4j:param name="param1" />
    </a4j:jsFunction>
</h:form>

问题是,当我点击TOP子菜单param1正在按预期更改时,但是当我尝试点击任何内部子菜单onclick时会被触发但是顶部菜单param1,即使内部子菜单有onclick =“menuGroupAction('itslabel')”。知道为什么会这样吗? 我正在检查使用

发布的参数
  

String param1 = FacesContext.getCurrentInstance()。getExternalContext()。getRequestParameterMap()。get(“param1”);

另外,当在任何子菜单中点击UIMenuItem时,实际上有两个menuGroupAction调用,一个调用Top菜单,另一个调用menuItem。 感谢您的回复和对不良英语的抱歉。

更新

继承人我如何使用rich:panelMenu页面

<h:form>
    <rich:panelMenu binding="#{leftMenu.menuCategories}"  groupMode="ajax" itemMode="ajax" bubbleSelection="false"  ></rich:panelMenu>
</h:form>

用于panelMenu模型menuCategories的heres getter

 /**
 * @return the menuCategories
 */
public UIPanelMenu getMenuCategories() {
    if(menuCategories == null){
        menuCategories = menuService.createCategoriesUIPanelMenu();
    }
    return menuCategories;
}

以及我是如何创建UIPanelMenu

public UIPanelMenu createCategoriesUIPanelMenu(){

    List<Category> allTopCategories = catOper.getAllTopCategories();
    int menulevel = 1;
    sortByOrderOfCategories(allTopCategories);

    UIPanelMenu categories = new UIPanelMenu();

    categories.setTopGroupClass("button");

    for (Category category : allTopCategories) {

        UIPanelMenuGroup topMenuCategory = new UIPanelMenuGroup();

        topMenuCategory.setLabel(category.getName());
        topMenuCategory.setOnclick("menuGroupAction('"+category.getName()+"')");

        rekursiveCategoriesMenuGroupSetter(topMenuCategory,category,menulevel);

        categories.getChildren().add(topMenuCategory);

    }

    return categories;

}

private UIPanelMenuGroup rekursiveCategoriesMenuGroupSetter(UIPanelMenuGroup parent, Category category, int menuLevel){


    int level = menuLevel+1;
    List<Category> allTopCategories = (List<Category>) category.getCategoryCollection();

    sortByOrderOfCategories(allTopCategories);

    for (Category child : allTopCategories) {

        if(!child.getCategoryCollection().isEmpty()){

            UIPanelMenuGroup subGroup = new UIPanelMenuGroup();
            subGroup.setLabel(child.getName());
            subGroup.setLeftIconClass("menuLevel"+level);
            subGroup.setOnclick("menuGroupAction('"+child.getName()+"')");

            parent.getChildren().add(subGroup);

            rekursiveCategoriesMenuGroupSetter(subGroup,child,level);
        }
        else{
            UIPanelMenuItem item = new UIPanelMenuItem();
            item.setLabel(child.getName());
            item.setLeftIconClass("menuLevel"+level);
            item.setOnclick("menuGroupAction('"+child.getName()+"')");

            parent.getChildren().add(item);
        }

    }

    return parent;

}

更新

奇怪的是,我在干净的页面上尝试了它,并得到一些有趣的消息。当theres设置默认groupMode又名'客户'时,当点击某个内部组时,有两个调用该操作,一个带有顶级子菜单参数,另一个带有正确的内部子菜单(与服务器相同),这是我向前迈出的一小步比较只用顶级子菜单调用。

0 个答案:

没有答案