在PrimeFaces菜单组件中混合静态和动态菜单项

问题描述 投票:0回答:1

我想在标记中将菜单的一部分保持静态,而用Java动态生成另一部分。

<p:menubar>
    <p:menuitem value="static stuff"/>
    <p:submenu label="dynamic stuff" model="#{bean.dynamicMenu}"/>
    <!-- more static stuff -->
</p:menubar>

这仅显示静态项,并且从不调用我的getDynamicMenu方法,因为p:submenu不具有model属性。

我尝试在菜单结构中使用ui:include将标记移动到一个额外的文件中,并在不同的上下文中包括该标记,但是Primefaces抱怨它不喜欢将其作为p:menubar和/或p:submenu的子元素。

如何在xhtml中使菜单的某些部分保持静态,而在Java中使菜单的某些部分保持动态?

primefaces jsf-2.2
1个回答
0
投票

虽然我不能使用ui:include,但是我可以使用c:forEach,正如@Kukeltje在他的评论中指出的那样:

<p:submenu label="Dynamic 0" rendered="#{list.size() eq 0">
    <p:menuitem value="Nothing here..." url="...">
</p:submenu>

<p:submenu label="Dynamic 1" rendered="#{list.size() eq 1}">
    <c:set var="node" value="#{list[0]}"/>
    <!-- more menu structure here -->
</p:submenu>

<p:submenu label="Dynamic N" rendered="#{list.size() gt 1}">
    <c:forEach items="#{list}" var="item">
        <p:submenu label="#{item}">
            <!-- more menu structure here -->
        </p:submenu>
    </c:forEach>
</p:submenu>

这使我可以根据我的支持bean来显示不同的菜单。

再次感谢,@ Kukeltje!

© www.soinside.com 2019 - 2024. All rights reserved.