0
<p:panelMenu>
            <p:submenu label="Articoli">
                <p:menuitem value="Anagrafica" action="/articoli/anagrafica" icon="ui-icon-document" ajax="false" />
                <p:menuitem value="Importazione" action="/articoli/importazione" ajax="false" />
                <p:menuitem value="Marchi" action="/articoli/marchi" ajax="false" />
            </p:submenu>
            <p:submenu label="Clienti">
                <p:menuitem value="Anagrafica" action="/clienti/anagrafica" ajax="false" />
            </p:submenu>
            <p:submenu label="Vendite" icon="ui-icon-suitcase">
                <p:menuitem value="Point Of Sale" action="/vendite/pos" ajax="false" />
            </p:submenu>
            <p:submenu label="Utilita" icon="ui-icon-calculator">
                <p:menuitem value="TestPDF" action="#{menuController.getTestPdf()}" ajax="false" />
            </p:submenu>
        </p:panelMenu>

此菜单显示完美,但经过一点导航后,它的行为方式无法预测。

我的意思是我无法控制每个子菜单的打开/关闭状态,因此,在每个菜单项单击和页面加载时,它们会随机展开/折叠!

经过一番搜索,我发现 panelMenu 使用客户端 cookie 来保存子菜单的状态,但是....不是应该自动管理所有这些吗?

如何手动控制每个子菜单的状态?

4

1 回答 1

0

您不能像使用 p:accordionPanel 的 activeIndex 属性那样手动控制此行为。

但我面临同样的问题,我在 stackoverflow 上发现了这个问题: Primefaces 3.4 p:panelMenu:无法控制 p:submenu 和 p:menuitem 的状态

结论是 panelMenu 对于同一应用程序目录中的页面将具有相同的状态。将页面置于更复杂的文件夹结构中,您只能将所有当前页面包装在“伪页面”中,并将这些伪页面放在同一个文件夹中。

所以你最终会得到一个像这样的伪页面:

<h:html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
</h:head>
<h:body>
  <ui:composition>
    <ui:include src="/actualPagesDirectory/actualPage.xhtml" />
  </ui:composition>
</h:body>
</h:html>

这不是很好,但到目前为止,我看到的唯一解决方案是按原样使用 primefaces panelMenu。

编辑:我的结论是不正确的。拥有这样的伪页面不会改变行为。所以它仍然是控制行为的否决。

此外,我发现这个问题是已知的并将得到解决: Primefaces forum 但我仍然找不到这个问题在 primefaces 3.5.CR1 中得到解决。

于 2013-02-07T16:35:30.067 回答