global filter
的过滤器匹配模式是什么(不是默认为'startsWith'的单个列过滤器)以及如何更改它?
我问的原因是,当我在所有列中使用匹配模式设置为'startsWith'的全局过滤器时,仍然可以使用'包含'过滤模式获取值。见下面的截图。
我不应该获取第一行以外的行,因为我在所有列中都指定了'startsWith'。
这是我的数据表,
<h:form id="countryTable">
<p:dataTable rowKey="" value="#{countryBean.countriesList}"
var="country" selection="#{countryBean.selectedCountries}"
styleClass="data-table-style" widgetVar="countryTableWVar"
filteredValue="#{countryBean.filteredCountries}">
<f:facet name="header">
<div class="align-left">
<p:outputPanel>
<h:outputText value="Search all fields:" />
<p:inputText id="globalFilter" onkeyup="countryTableWVar.filter();"
style="width:150px" />
</p:outputPanel>
</div>
</f:facet>
<p:column selectionMode="multiple" style="width:2%;" />
<p:column headerText="Numeric Code" filterMatchMode="startsWith"
filterStyle="display:none" filterBy="numericCode">
<h:outputText value="#{country.numericCode}"></h:outputText>
</p:column>
<p:column headerText="Alpha_2 Code" filterMatchMode="startsWith"
filterStyle="display:none" filterBy="alpha2">
<h:outputText value="#{country.alpha2}"></h:outputText>
</p:column>
<p:column headerText="Alpha_3 Code" filterMatchMode="startsWith"
filterStyle="display:none" filterBy="alpha3">
<h:outputText value="#{country.alpha3}"></h:outputText>
</p:column>
<p:column headerText="Name" filterMatchMode="startsWith"
filterStyle="display:none" filterBy="name">
<h:outputText value="#{country.name}"></h:outputText>
</p:column>
</p:dataTable>
</h:form>
如何更改数据表全局过滤器匹配模式?
答案 0 :(得分:2)
如果你看一下primefaces的源代码
org.primefaces.component.datatable.feature.FilterFeature.java
在第133行,您可以看到primefaces使用contains
String
方法
if(columnValue.toLowerCase(filterLocale).contains(globalFilter)){
globalMatch = true;
}
所以现在除了根据你的需要改变代码并构建你自己的primefaces jar之外别无他法。
答案 1 :(得分:1)
来自Primefaces 4.0文档:
位于标题的过滤器是应用于所有字段的全局过滤器,这是通过调用客户端实现的 侧面API方法称为filter(),重要的部分是将输入文本的id指定为globalFilter 这是datatable的保留标识符。
用例将是:
<p:dataTable var="car" value="#{carBean.cars}"
filteredValue="#{carBean.filteredCars}" widgetVar="carsTable">
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Search all fields:" />
<h:inputText id="globalFilter" onkeyup="PF('carsTable').filter()" />
</p:outputPanel>
</f:facet>
<p:column filterBy="model" headerText="Model" filterMatchMode="contains">
<h:outputText value="#{car.model}" />
</p:column>
<p:column filterBy="year" headerText="Year" footerText="startsWith">
<h:outputText value="#{car.year}" />
</p:column>
<p:column filterBy="manufacturer" headerText="Manufacturer"
filterOptions="#{carBean.manufacturerOptions}" filterMatchMode="exact">
<h:outputText value="#{car.manufacturer}" />
</p:column>
<p:column filterBy="color" headerText="Color" filterMatchMode="endsWith">
<h:outputText value="#{car.color}" />
</p:column>
</p:dataTable>
它没有说明全局过滤器的startsWith
或endsWith
具体情况。在issue tracker上打开一个帖子可能会很有趣。