Я хочу использовать компонент PrimeFaces TabView для отображения данных с нашего сервера на вкладках. Мне нужно три вкладки для отображения трех таблиц с разными данными.
Это работает, если я пишу:
<p:tabView>
<p:tab>
// <p:dataTable> logic comes here
</p:tab>
<p:tab>
// and here
</p:tab>
</p:tabView>
Моя проблема в том, что логика dataTable более или менее одинакова для каждой вкладки. Мне не нравится такое дублирование кода, поэтому я хотел бы создать пользовательскую вкладку, которая работает следующим образом:
резюме.xhtml
<p:tabView>
<my:customTab dataToDisplay="#{myBean.dataSet1}">
<my:customTab dataToDisplay="#{myBean.dataSet2}">
</p:tabView>
Но до сих пор мне не удалось реализовать составной компонент, который работает. Мой подход заключается в создании отдельного файла customTab.xhtml с этим кодом.
customTab.xhtml
<ui:composition // namespace definitions
... >
<composite:interface>
<composite:attribute name="dataToDisplay" />
</composite:interface>
<composite:implementation>
<p:tabView>
// dataTable logic comes here
</p:tabView>
</composite:implementation>
</ui:composition>
Но при этом компонент tabView не показывает никаких вкладок. Вероятно, это так, потому что JSF будет рисовать отдельный компонент для каждого my:customTab-Tag. Таким образом, tabView не увидит, что внутри my:customTab есть p:tab. Что мне нужно сделать, чтобы TabView распознал p: tab внутри my: customTab ?