如何在jsf的所有页面中设置菜单栏

时间:2013-11-20 10:16:57

标签: jsf

我创建了一个菜单栏,我希望它在整个应用程序中的所有页面。当我通过菜单栏状态(即子菜单是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>

除此之外是否有其他方法?

2 个答案:

答案 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>