Ответ 1
ui:param
для меня лучший способ. Это просто вопрос правильного использования. В качестве простого примера я определяю параметр здесь, чтобы указать там боковую панель или нет. Имейте в виду, что вы можете определить определение вставки по умолчанию в шаблоне, поэтому просто объявите его внутри:
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 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>
Затем пара представлений здесь, одна с боковой панелью, а другая без боковой панели. Вы можете проверить его и посмотреть, как меняется стиль в браузере. Вы заметите, что во втором нет значения для #{noSideBar}
, которое будет оцениваться как false
в любом условном выражении EL.
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>
Таким образом вам нужно только беспокоиться о том, чтобы включить боковую панель или нет в представлении клиента.