在 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;
}