Я помню, как пытался сделать что-то подобное, используя пользовательский тег, FaceletHandler и т. Д. В конце концов, все мелкие проблемы со временем рендеринга сделали его не стоящим усилий.Имейте в виду, что я ( и до сих пор: - (... ) использовал фейслеты для jsf 1.1, поэтому не уверен, что это лучше в более поздних версиях.
Насколько динамичен / сколькос какими-то разными лицами вы должны иметь дело? Причина, по которой я спрашиваю, состоит в том, чтобы вы могли (позаимствовать термин у мастеров компилятора) развернуть свой цикл. Вместо
<ui:repeat value="#{panels}" var="panel">
<ui:include src="#{panel.facelet}">
</ui:repeat>
Вы могли бы сделать
<custom:panelOneFacelet rendered="#{hasPanel1}" />
<custom:panelTwoFacelet rendered="#{hasPanel2}" />
<!-- etc... -->
И в вашем фейс-лите вы могли бы иметь что-то вроде:
<c:if test="#rendered" >
<!-- EVERYTHING IN THE FACELET HERE!!!-->
</c:if>
Такой подход low-tech подходит для небольшого контролируемого набора, но если у вас очень большой и разнообразный набор лицевых граней, это может не сработать.
Могу я спросить, почему, иногда с пониманием высокого уровня, гуру СО могут предлагать гораздо более простые идеи длядостижение той же цели