2014-09-27 13 views
8

'da tanımlandığını test edin 'da tanımlanmış olup olmadığını bilmek mümkün olup olmadığını merak ediyorum. Ayrı ui:param'u kullanarak bunu yapabileceğimi biliyorum, ancak bunu basit ve daha az hataya eğilimli tutmak için bunu yapmak istemiyorum.Ui: insert'in şablon istemcisi

Örnek:

Şablon

... 
<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> 
... 

Sayfa 1

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

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

Sayfa 2

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

cevap

10

ui:param benim için en iyi yol. Bu sadece doğru yolu kullanma meselesi. Basit bir örnek olarak, bir kenar çubuğu olup olmadığını belirlemek için burada bir param tanımlar. şablonda varsayılan bir ekleme tanımını tanımlayabilir unutmayın, bu yüzden sadece içeride beyan:

template.xhtml görüşlerin Sonra çift burada

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

, tek kenar çubuğu ve diğer kullanılarak kenar çubuğu yok. Test edebilir ve tarayıcının stilinin nasıl değiştiğini görebilirsiniz. Herhangi bir EL koşullu ifadesinde false değerini değerlendirecek olan ikinci birimde #{noSideBar} için bir değer olmadığını fark edeceksiniz.

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> 

yalnızca istemci görünümünde kenar çubuğu veya olmasın dahil endişelenmenize gerek Bu şekilde.

+0

Teşekkür ederim, bu şekilde düşünmedim, yakında deneyeceğim! –