c:foreach ui:repeat 在 <p:menubar> primefaces 中不工作

c:foreach ui:repeat not working in <p:menubar> primefaces

<p:tabView scrollable="true" var="tabItem" value="#{rootItem.lstItems}">
 <p:tab title="#{tabItem.txtMenuName}">
    <p:menubar>
        <c:forEach items="#{tabItem.lstItems}" var="menuItem">
            <p:menuitem value="#{menuItem.txtMenuName}" />
        </c:forEach>
    </p:menubar>
       <--<p:menubar>
         <ui:repeat items="#{tabItem.lstItems}" var="menuItem">
            <p:menuitem value="#{menuItem.txtMenuName}" />
         </ui:repeat>
       </p:menubar>
     -->
</p:tab>

它在 primefaces 4.0 (netbeans IDE) 中运行良好

但不能在 eclipse primefaces 5.0 中工作 (eclipse IDE) 但是,ui:repeat 在这两种情况下都不起作用。

抛出的异常是:

 javax.servlet.ServletException:com.sun.faces.facelets.compiler.UIInstructions cannot be cast to  org.primefaces.model.menu.MenuElement

UI repeat 在这两种情况下都不起作用,因为 menuBar 呈现它的子项本身,而不是通过 menuItem 的 renderes,因此它也不会 'delegate' 到 ui:repeat。如果您想要动态菜单,请创建一个模型并使用模型属性将两者关联起来。类似于 PrimeFaces showcase 中所做的事情:

xhtml:

<p:menu model="#{menuView.model}" />

java:

//First submenu
DefaultSubMenu firstSubmenu = new DefaultSubMenu("Dynamic Submenu");

DefaultMenuItem item = new DefaultMenuItem("External");
item.setUrl("http://www.primefaces.org");
item.setIcon("ui-icon-home");
firstSubmenu.addElement(item);

model.addElement(firstSubmenu);

//Second submenu
DefaultSubMenu secondSubmenu = new DefaultSubMenu("Dynamic Actions");
...

关于错误,检查this。删除评论可能会有所帮助