如何将 primeface 列包含到组合中
Posted
技术标签:
【中文标题】如何将 primeface 列包含到组合中【英文标题】:How to include a primeface column into a composite 【发布时间】:2021-06-14 20:37:37 【问题描述】:我有一个 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" />
我已经搜索/尝试了一天,但没有任何真正的成功。
我已经设法使用带有参数的<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? 即使它使用richfaces 和这个解决方案 Column as Composite Component inside DataTable 但没有工作。
我还在某处读到 <p:column...>
应该是 <p:datatable...>
的直接子代,所以这是不可能的,但我相信这是旧的 primefaces 版本(3 或 4)。
那么,有谁知道 Primefaces 6 或 8 是否可以实现,如果可以,如何实现?
【问题讨论】:
【参考方案1】:您可以使用custom Facelet tags 来干燥您的代码。
只需为以下列创建标签:
<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>
这是我们的一个项目中表格的外观:
<dt:dataTable controller="#controller"
sortField="activationDate">
<dt:column id="id"/>
<dt:columnDate id="activationDate"/>
...
<dt:dataTable/>
【讨论】:
谢谢@Jasper,这成功了……差不多。我得到了要显示的列,但我使用的是带有 filterFunction 属性的自定义过滤器函数,并且只有最后一列正确过滤。另一个只是不过滤任何东西(它们似乎被忽略了)。当我使用显式 p:column 标记时工作正常。知道为什么吗?我想我真的应该为这个问题创建一个新线程! 不知道.. 我们使用自定义过滤。也许添加一个新问题并添加一些细节。以上是关于如何将 primeface 列包含到组合中的主要内容,如果未能解决你的问题,请参考以下文章