标题中的Primefaces datatable筛选器特定列

标题中的Primefaces datatable筛选器特定列,primefaces,jsf-2,Primefaces,Jsf 2,在Primefaces datatable中,它可以通过以下代码过滤特定列: <p:column filterBy="#{car.id}" headerText="Id" filterMatchMode="contains"> <h:outputText value="#{car.id}" /> </p:column> 上面的代码将在列的标题上生成一个过滤器。我想要的是在datatable的头上创建一个过滤器,而不是列。从中,有一个代码: <

在Primefaces datatable中,它可以通过以下代码过滤特定列:

<p:column filterBy="#{car.id}" headerText="Id" filterMatchMode="contains">
    <h:outputText value="#{car.id}" />
</p:column>

上面的代码将在列的标题上生成一个过滤器。我想要的是在datatable的头上创建一个过滤器,而不是列。从中,有一个代码:

<f:facet name="header">
    <p:outputPanel>
        <h:outputText value="Search all fields:" />
        <p:inputText id="globalFilter" onkeyup="PF('carsTable').filter()"/>
    </p:outputPanel>
</f:facet>


这将在datatable的标题中放置一个过滤器,但它将过滤datatable的所有字段,这是我不想要的,我希望它只过滤特定的列,是否可能?

您可以使用一些技巧。首先将
widgetVar
属性添加到
p:dataTable
,例如
widgetVar=“myTable”
。然后,向您添加一个
id
属性
p:column

<p:column filterBy="#{car.id}"
          headerText="Id"
          filterMatchMode="contains"
          id="clm">
  <h:outputText value="#{car.id}" />
</p:column>
这里我假设您的表单具有ID
frm
,数据表具有ID
tbl
。它们可能有不同的ID,因此相应地更改代码

如果不希望过滤器在列中可见,可以使用CSS规则将其隐藏:

.ui-datatable .ui-column-filter[id='frm:tbl:clm:filter'] {
  display: none;
}
如果您使用的是延迟加载,您也可以签出

.ui-datatable .ui-column-filter[id='frm:tbl:clm:filter'] {
  display: none;
}