<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来保存子菜单的状态,但是....它不是应该自动管理所有这些吗?
如何手动控制每个子菜单的状态?
您不能手动控制此行为,因为您可以通过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论坛但是我仍然没有发现这个问题在primefaces中得到解决3.5.CR1.