动态panelMenu in richfaces

时间:2014-10-30 09:42:31

标签: dynamic richfaces jpanelmenu

我正在尝试使用我已经拥有的项目列表动态创建panelMenu。 但它似乎不起作用,因为我没有得到任何结果。 所以这是我的代码:

<rich:panelMenu id="filterListFuncPost" style="width:180px"
    itemMode="ajax" groupMode="ajax"
    groupExpandedLeftIcon="triangleUp"
    groupCollapsedLeftIcon="triangleDown"
    topGroupExpandedRightIcon="chevronUp"
    topGroupCollapsedRightIcon="chevronDown" itemLeftIcon="disc">
        <rich:panelMenuGroup label="Functional Positions">
            <c:forEach xmlns:c="http://java.sun.com/jstl/core" var="item"
                items="#{reportsBacking.selectedFunctPosIndex}">
                    <rich:panelMenuItem label="#{item}" />
            </c:forEach>
        </rich:panelMenuGroup>

</rich:panelMenu>

2 个答案:

答案 0 :(得分:0)

对于可能有帮助的人,我找到了一种方法,可以使用rich:list代替c:forEach,并且工作正常。

答案 1 :(得分:0)

更新:是否适用于RichFaces panelMenu,但仅限于使用正确的迭代器。我用新鲜的眼睛回到了这个问题,并找到了一个相当明显的解决方案,但它似乎并没有出现在互联网上,所以这里是:

xmlns:c="http://java.sun.com/jstl/core"
xmlns:rich="http://richfaces.org/rich"

<rich:panelMenu id="menuRoot">
    <rich:panelMenuGroup id="lev1menu">
        <c:forEach var="fancyGroup" items="#{myBean.myFancyGroupEntity}">
            <rich:panelMenuGroup label="#{fancyGroup.name}" id="lev2menu_#{fancyGroup.id}">
                <c:forEach var="fancyItem" items="#{fancyGroup.items}">
                    <rich:panelMenuItem label="#{fancyItem.name}" action="#{myBean.viewItem}">
                        <a4j:actionParam name="itemId" value="#{fancyItem.id}"/>
                    </rich:panelMenuItem>
                </c:forEach>
            </rich:panelMenuGroup>
        </c:forEach>
    </rich:panelMenuGroup>
</rich:panelMenu>

为什么会这样?因为JSTL核心组件在JSF组件(或类似的东西)之前被解析和处理,因此c:forEach在解析和处理JSF之前呈现出所有RichFaces(或其他JSF)子组件。因此,panelMenu在解析时具有正确类型的子项。

OLD:不适用于RichFaces panelMenu(org.richfaces.component.UIPanelMenu)组件。

我尝试了一种类似的方法,使用数据库项动态生成菜单层次结构,但当它尝试在服务器端解析它时,RichFaces尝试将任何子项转换为panelMenuGroup或panelMenuItem,并使用{{1}尝试从ClassCastException转换,这对于你的JSTL forEach迭代组件(我认为是服务器上com.sun.facelets.component.UIRepeat的一个实例)是相同的。