c:foreach ui:重复不在<p:menubar> primefaces </p:menubar>中工作

时间:2015-02-25 06:16:14

标签: jsf 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:在这两种情况下重复都不起作用。

抛出的异常是:

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

1 个答案:

答案 0 :(得分:1)

UI重复在两种情况下都不起作用,因为menuBar呈现它的子项本身,而不是通过menuItem的renderes,因此它不会“委托”给ui:repeat。如果需要动态菜单,请创建模型并使用model属性将两者相关联。在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。删除评论可能会有所帮助