Вы также должны проверить Facelets ; На DeveloperWorks есть хорошая вводная статья .
Тег Facelets <ui:insert/>
сопоставим с тегом ASP.NET <asp:ContentPlaceHolder/>
, используемым на главных страницах; он позволяет вам предоставлять содержимое по умолчанию для этой области страницы, но это может быть переопределено.
Чтобы заполнить шаблон Facelets на другой странице, вы начинаете с элемента <ui:composition/>
, который указывает на файл шаблона. Это примерно эквивалентно объявлению атрибута MasterPageFile на странице ASP.NET.
Внутри элемента <ui:composition/>
элементы <ui:define/>
используются для переопределения значений по умолчанию для шаблона, аналогично тому, как используется тег <asp:Content/>
. Эти элементы могут содержать любой контент - от простых строк до элементов JSF.
Итак, чтобы собрать все вместе ...
В master.xhtml :
<!-- HTML header content here -->
<ui:insert name="AreaOne">Default content for AreaOne</ui:insert>
<ui:insert name="AreaTwo">Default content for AreaTwo</ui:insert>
<!-- HTML footer content here -->
In page.xhtml :
<ui:composition template="/WEB-INF/templates/master.xhtml">
<ui:define name="AreaOne">Here is some new content</ui:define>
<ui:define name="AreaTwo">
<p>Some new content here too</p>
</ui:define>
</ui:composition>
И это будет выглядеть как:
<!-- HTML header content here -->
Here is some new content
<p>Some new content here too</p>
<!-- HTML footer content here -->
Вы также получаете некоторые другие преимущества с Facelets, такие как возможность повторного использования компонентов страницы с различными данными.
(отредактировано для предоставления дополнительной информации.)