如何自定义 SelectOneMenu 的过滤功能

How can I customize the filter function for SelectOneMenu

我试图在 Primefaces 文档中查找,但我没有找到如何自定义 SelectOneMenu 的过滤器功能。

我加filterMatchMode="custom" filterFunction="#{mainRandevuBean.ilFilter()}"

但是不知道bean怎么写filterFunction.

过滤器是一个 javascript(客户端)函数。一切都在 PrimeFaces documentation 中,您应该始终首先、仔细、彻底地研究它。

所以使用filterFunction="myFilter"

并创建一个 javascript 函数,例如

function myFilter(itemLabel, filterValue) {
     // return true if this label matches, false otherwise
}

我用自动完成组件解决了这个问题。带有 dropdown="true" 属性 的 Primefaces 自动完成组件就像一个菜单一样工作。

作为旁注:primefaces 文档没有在语义上说明参数。它也没有提到标签的来源(事实上,文档提到的 "the item value" 不是很清楚)。

事实上,我使用 JavaScript 函数对此进行了调试,以便找出默认提供的标签。

function filterList(label, filter){
  alert("label="+label+" and filter="+filter);
  return false;
}

起初我以为它会像为每个列表项生成的 HTML 中的文本一样。但是在调试它时,我看到警告说标签类似于 my.package.SomeValueObject@123456(显然是列表中每个项目上的 Java 对象 toString)。

您需要在 selectManyMenu 内的 selectItems 上定义 itemLabel 属性 以生成标准过滤机制使用的正确文本值。据我所知,这是必须将 itemLabel 放在那里的唯一原因。在解释令人困惑的过滤之前,在文档中指定了 itemLabel。

据我所知,itemValue 无论如何都默认为对象值,因此我认为文档中的内容是多余的。

itemValue="#{player}"

希望对大家有所帮助:.)