1

我正在尝试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>
4

2 回答 2

0

它可能对谁有帮助,我找到了一种使其工作的方法,即使用 arich:list而不是c:forEach它工作正常。

于 2014-10-30T11:25:24.693 回答
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 在解析时具有正确类型的子项。

旧:不能与 RichFaces panelMenu ( org.richfaces.component.UIPanelMenu) 组件一起使用。

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

于 2018-05-16T00:52:15.487 回答