我创建了一个菜单栏,我希望它在整个应用程序中的所有页面。当我通过菜单栏状态(即子菜单是unfolder)将文件包含在其他文件中时,可以维护。所以我创建了一个面板并且只点击了页面内容得到刷新,菜单保持稳定。链接剂量改变,即我的主页是菜单上的菜单1,我的网址只是菜单栏。
<h:panelGrid columns="2">
<h:panelGroup id="menu" layout="block">
<h:form id= "form">
<h:outputStylesheet name="css/primefaces.css" />
<p:growl id="messages" autoUpdate="true" />
<p:panelMenu style="width:200px " styleClass="ui-menubar"
autoSubmenuDisplay="true">
<p:submenu label="Ajax Menuitems">
<p:menuitem value="Menu1" action ="#{menuBar.setPage('menu1.xhtml')}" />
</p:submenu>
</p:panelMenu>
</h:form>
</h:panelGroup>
<h:panelGroup id="content" layout="block" >
<form id = "contentform">
<ui:include src="#{menuBar.page}" />
</form>
</h:panelGroup>
</h:panelGrid>
<h:panelGroup id="footer" layout="block">
<h1>Footer</h1>
</h:panelGroup>
除此之外是否有其他方法?
答案 0 :(得分:1)
使用facelet page templates。创建一个通用模板,您可以在其中放置p:panelMenu
:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head />
<h:body>
<p:panelMenu style="width:200px " styleClass="ui-menubar"
autoSubmenuDisplay="true">
<p:submenu label="Ajax Menuitems">
<p:menuitem value="Menu1"
action ="#{menuBar.setPage('menu1.xhtml')}" />
</p:submenu>
</p:panelMenu>
<ui:insert name="general_content" />
</h:body>
</ui:composition>
之后,让所有页面都使用该模板:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="/templates/general_template.xhtml">
<ui:define name="general_content">
My content
</ui:define>
</ui:composition>
这样,每次进入特定视图时,它都会将general_template.xhtml
作为父模板(注意模板客户端的声明)并将general_content
部分填入其中定制内容。
答案 1 :(得分:0)
Xtreme Biker的回答是
我会添加一个调整
要在菜单中选择当前页面,请使用<ui:param name="pageName" value="index" />
并在菜单栏中使用#{pageName}
变量。像这样:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="/templates/general_template.xhtml">
<ui:param name="pageName" value="index" />
<ui:define name="general_content">
My content
</ui:define>
</ui:composition>
并在模板中 - &gt;菜单使用类似
的内容<li class="#{pageName == index ? 'active' : null}">
<h:link outcome="#{index}" value="Index" />
</li>