我正在尝试使用我已经拥有的项目列表动态创建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>
答案 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
的一个实例)是相同的。