2014-09-27 32 views
8

Ich frage mich, ob es möglich ist zu wissen, ob ui:insert in der ui:composition definiert wurde. Ich weiß, dass ich es mit separaten ui:param tun kann, aber wollte es einfach ohne, um es einfach und weniger fehleranfällig zu halten.Testen Sie, ob ui: im Template-Client definiert wurde:

Beispiel:

Vorlage

... 
<ui:insert name="sidebar" /> 

<!-- Conditionnaly set the class according if sidebar is present or not --> 
<div class="#{sidebar is defined ? 'with-sidebar' : 'without-sidebar'}"> 
    <ui:insert name="page-content" /> 
</div> 
... 

Seite 1

... 
<ui:define name="sidebar"> 
    sidebar content 
</ui:define> 

<ui:define name="page-content"> 
    page content 
</ui:define> 
... 

Seite 2

... 
<ui:define name="page-content"> 
    page content 
</ui:define> 
... 

Antwort

10

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.

+0

Danke, ich habe nie darüber nachgedacht, ich werde es bald versuchen! –