Dynamic richfaces中的动态面板菜单

Dynamic richfaces中的动态面板菜单,dynamic,richfaces,jpanelmenu,Dynamic,Richfaces,Jpanelmenu,我正在尝试使用我已有的项目列表动态创建panelMenu。 但它似乎不起作用,因为我没有得到任何结果。 这是我的代码: <rich:panelMenu id="filterListFuncPost" style="width:180px" itemMode="ajax" groupMode="ajax" groupExpandedLeftIcon="triangleUp" groupCollapsedLeftIcon="triangleDown" topGr

我正在尝试使用我已有的项目列表动态创建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>

对于可能有帮助的人来说,我找到了一种使其工作的方法,那就是使用rich:list而不是c:forEach,它工作得很好。

更新:对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时,它具有正确类型的子菜单

旧:无法使用RichFaces panelMenu org.RichFaces.component.UIPanelMenu组件


我尝试了一种类似的方法,使用数据库项动态生成菜单层次结构,但当它试图在服务器端解析它时,RichFaces尝试将任何子项转换为panelMenuGroup或panelMenuItem,并在尝试从com.sun.facelets.component.ui转换时遇到ClassCastException,对于JSTL forEach迭代组件也是一样的,它是服务器上org.apache.taglibs.standard.tag.rt.core.ForEachTag的一个实例。

您检查过生成的HTML了吗?它看起来像什么?c:forEach是一个标记处理程序,它在视图构建期间运行,因此,它可能太早了,无法访问reportsBacking的内容。rich:List是一个ui组件,在视图构建后运行,及时访问正确的变量。您可以很容易地将ui:repeat替换为rich:List,因此我可以使用rich:List尝试您的方法。谢谢使用ui:repeat无效-请参阅下面的备选答案。