ui:param
ist für mich der beste Weg. Es ist nur eine Frage der richtigen Verwendung. Als einfaches Beispiel definiere ich hier einen Parameter, um anzugeben, ob es eine Seitenleiste gibt oder nicht. Denken Sie daran, Sie eine Standard-Einführungs Definition in der Vorlage definieren kann, so dass es nur innerhalb erklären:
template.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<ui:insert name="sidebar">
<!-- By default, there's no sidebar, so the param will be present.
When you replace this section for a sidebar in the client template,
the param will be removed from the view -->
<ui:param name="noSideBar" value="true" />
</ui:insert>
<div class="#{noSideBar ? 'style1' : 'style2'}">
<ui:insert name="content" />
</div>
</ui:composition>
Dann paar Ansichten hier, eine der Seitenleiste und das andere mit keine Seitenleiste. Sie können es testen und sehen, wie sich der Stil im Browser ändert. Sie werden bemerken, dass es im zweiten keinen Wert für #{noSideBar}
gibt, der in jeder EL bedingten Anweisung false
auswertet.
page1.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets" template="/template.xhtml">
<ui:define name="content">
No sidebar defined? #{noSideBar}
</ui:define>
</ui:composition>
page2.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets" template="/template.xhtml">
<ui:define name="sidebar" />
<ui:define name="content">
No sidebar defined? #{noSideBar}
</ui:define>
</ui:composition>
So kann man nur zu erfahren, wie die Sidebar oder nicht in der Client-Ansicht kümmern.
Danke, ich habe nie darüber nachgedacht, ich werde es bald versuchen! –