如何将 primeface 列包含到组合中

How to include a primeface column into a composite

我有一个包含许多类似列的 primefaces 数据表,例如

    <p:column filterBy="#{element.value}" filterFunction="#{applicationHelperController.filterByNumber}" styleClass="ps-90-header" >
        <f:facet name="header">
            <p:tooltip for="@next" value="Some header tooltip"/>
            <h:outputText id="#{header}_id" value="Some header" styleClass="ps-90-header" />
        </f:facet>
        <h:outputText value="#{element.value}" />
    </p:column> 

有没有办法为它创建一个复合体,比如写

<mine:column value="#{element.value}" header="Some header" headerTooltip="Some header tooltip" />

我已经 searching/trying 一天了,但没有任何真正的成功。 我已经设法将 <ui:include...> 与参数一起使用,但它几乎与原始

一样冗长
    <ui:include src="/WEB-INF/includes/countColumn.xhtml" >
        <ui:param name="value" value="#{element.value}"/>
        <ui:param name="header" value="Some header"/>
        <ui:param name="headerTooltip" value="Some header tooltip"/>
    </ui:include>

我已经尝试使用这里预定义的 taglib How to create a composite component for a datatable column? even if it uses richfaces and this solution Column as Composite Component inside DataTable 但是 none 工作。

我还在某处读到 <p:column...> 应该是 <p:datatable...> 的直接子代,所以这是不可能的,但我相信这是旧的 primefaces 版本(3 或 4)。

那么,有人知道 Primefaces 6 或 8 是否可行吗?如果可行,如何实现?

您可以使用 custom Facelet tags 来 DRY 您的代码。

只需为列创建标签,例如:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:p="http://primefaces.org/ui">
  <p:column ...>
    ...
  </p:column>
</ui:composition>

这是 table 在我们的一个项目中的样子:

<dt:dataTable controller="#{controller}"
              sortField="activationDate">
  <dt:column id="id"/>
  <dt:columnDate id="activationDate"/>
  ...
<dt:dataTable/>