Primefaces 数据表筛选 header 中的特定列
Primefaces datatable filter specific column in header
在Primefaces数据表中,可以通过以下代码过滤特定的列:
<p:column filterBy="#{car.id}" headerText="Id" filterMatchMode="contains">
<h:outputText value="#{car.id}" />
</p:column>
上面的代码将在列的 header 上生成一个过滤器。我想要的是在数据表的 header 上创建一个过滤器,而不是列。来自ShowCase,有一个代码:
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Search all fields:" />
<p:inputText id="globalFilter" onkeyup="PF('carsTable').filter()"/>
</p:outputPanel>
</f:facet>
这会在数据表的header中放置一个过滤器,但是它会过滤数据表的所有字段,这是我不想要的,我希望它只过滤特定的列,是吗可能吗?
您可以使用一些技巧。首先为您的 p:dataTable
添加一个 widgetVar
属性,例如 widgetVar="myTable"
。然后,给你加一个id
属性p:column
:
<p:column filterBy="#{car.id}"
headerText="Id"
filterMatchMode="contains"
id="clm">
<h:outputText value="#{car.id}" />
</p:column>
您可以使用此 ID select 列筛选字段。在全局过滤器中,您想要删除 id
属性,并添加一个 onkeyup
侦听器,该侦听器设置列过滤器中的输入值并使用 [=13 在 table 上触发过滤=].
<f:facet name="header">
<p:inputText onkeyup="document.getElementById('frm:tbl:clm:filter').value=this.value; PF('myTable').filter();"/>
</f:facet>
这里我假设您的表单的 ID 为 frm
,您的数据 table 的 ID 为 tbl
。他们可能有不同的 ID,因此相应地更改代码。
如果您不希望过滤器在列中可见,您可以使用 CSS 规则将其隐藏:
.ui-datatable .ui-column-filter[id='frm:tbl:clm:filter'] {
display: none;
}
如果您正在使用延迟加载,您还可以查看 Primefaces lazy datatable: put my own filter instead of GlobalFilter
在Primefaces数据表中,可以通过以下代码过滤特定的列:
<p:column filterBy="#{car.id}" headerText="Id" filterMatchMode="contains">
<h:outputText value="#{car.id}" />
</p:column>
上面的代码将在列的 header 上生成一个过滤器。我想要的是在数据表的 header 上创建一个过滤器,而不是列。来自ShowCase,有一个代码:
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Search all fields:" />
<p:inputText id="globalFilter" onkeyup="PF('carsTable').filter()"/>
</p:outputPanel>
</f:facet>
这会在数据表的header中放置一个过滤器,但是它会过滤数据表的所有字段,这是我不想要的,我希望它只过滤特定的列,是吗可能吗?
您可以使用一些技巧。首先为您的 p:dataTable
添加一个 widgetVar
属性,例如 widgetVar="myTable"
。然后,给你加一个id
属性p:column
:
<p:column filterBy="#{car.id}"
headerText="Id"
filterMatchMode="contains"
id="clm">
<h:outputText value="#{car.id}" />
</p:column>
您可以使用此 ID select 列筛选字段。在全局过滤器中,您想要删除 id
属性,并添加一个 onkeyup
侦听器,该侦听器设置列过滤器中的输入值并使用 [=13 在 table 上触发过滤=].
<f:facet name="header">
<p:inputText onkeyup="document.getElementById('frm:tbl:clm:filter').value=this.value; PF('myTable').filter();"/>
</f:facet>
这里我假设您的表单的 ID 为 frm
,您的数据 table 的 ID 为 tbl
。他们可能有不同的 ID,因此相应地更改代码。
如果您不希望过滤器在列中可见,您可以使用 CSS 规则将其隐藏:
.ui-datatable .ui-column-filter[id='frm:tbl:clm:filter'] {
display: none;
}
如果您正在使用延迟加载,您还可以查看 Primefaces lazy datatable: put my own filter instead of GlobalFilter