在 selectOneListbox 或 SelectOneMenu 中过滤自定义以忽略重音或特殊字符
Filter custom in selectOneListbox or SelectOneMenu to ignore accents or special characters
如何在这些 Primefaces 组件的搜索字段中进行过滤,以便它们忽略重音符号等特殊字符。
要自定义过滤器,您必须将 filterMatchMode 属性定义为 "custom" 并使用定义 javascript 函数的 filterFunction = "myFilter" 属性,如 Primefaces documentation(466 或 470)。
在这种情况下,我将自定义过滤器以忽略重音符号和特殊字符,并且包含(与 filterMatchMode="contains" 相同)
file.xhtml
<p:selectOneListbox filter="true" filterMatchMode="custom" filterFunction="contains" value="#{controllerBean.id}">
<f:selectItems value="#{controllerBean.list}" var="item" itemLabel="#{item.value}" itemValue="#{item.id}" />
</p:selectOneListbox>
file.js
function contains(itemLabel, filterValue) {
return itemLabel.includes(filterValue) || specialCharacters(itemLabel).includes(filterValue);
}
function specialCharacters(input){
var c=input.toLowerCase();
c = c.replace(new RegExp("\s", 'g'),"");
c = c.replace(new RegExp("[àáâãäå]", 'g'),"a");
c = c.replace(new RegExp("æ", 'g'),"ae");
c = c.replace(new RegExp("ç", 'g'),"c");
c = c.replace(new RegExp("[èéêë]", 'g'),"e");
c = c.replace(new RegExp("[ìíîï]", 'g'),"i");
c = c.replace(new RegExp("[òóôõö]", 'g'),"o");
c = c.replace(new RegExp("œ", 'g'),"oe");
c = c.replace(new RegExp("[ùúûü]", 'g'),"u");
c = c.replace(new RegExp("[ýÿ]", 'g'),"y");
return c;
}
如何在这些 Primefaces 组件的搜索字段中进行过滤,以便它们忽略重音符号等特殊字符。
要自定义过滤器,您必须将 filterMatchMode 属性定义为 "custom" 并使用定义 javascript 函数的 filterFunction = "myFilter" 属性,如 Primefaces documentation(466 或 470)。
在这种情况下,我将自定义过滤器以忽略重音符号和特殊字符,并且包含(与 filterMatchMode="contains" 相同)
file.xhtml
<p:selectOneListbox filter="true" filterMatchMode="custom" filterFunction="contains" value="#{controllerBean.id}">
<f:selectItems value="#{controllerBean.list}" var="item" itemLabel="#{item.value}" itemValue="#{item.id}" />
</p:selectOneListbox>
file.js
function contains(itemLabel, filterValue) {
return itemLabel.includes(filterValue) || specialCharacters(itemLabel).includes(filterValue);
}
function specialCharacters(input){
var c=input.toLowerCase();
c = c.replace(new RegExp("\s", 'g'),"");
c = c.replace(new RegExp("[àáâãäå]", 'g'),"a");
c = c.replace(new RegExp("æ", 'g'),"ae");
c = c.replace(new RegExp("ç", 'g'),"c");
c = c.replace(new RegExp("[èéêë]", 'g'),"e");
c = c.replace(new RegExp("[ìíîï]", 'g'),"i");
c = c.replace(new RegExp("[òóôõö]", 'g'),"o");
c = c.replace(new RegExp("œ", 'g'),"oe");
c = c.replace(new RegExp("[ùúûü]", 'g'),"u");
c = c.replace(new RegExp("[ýÿ]", 'g'),"y");
return c;
}