如何自定义SelectOneMenu的过滤功能

时间:2015-04-14 08:13:53

标签: primefaces filter selectonemenu filterfunction

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

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

但我不知道如何写bean filterFunction

3 个答案:

答案 0 :(得分:3)

过滤器是一个javascript(客户端)功能。这一切都在PrimeFaces documentation中,你应该始终小心谨慎地看待它。

因此请使用filterFunction="myFilter"

并创建一个类似

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

答案 1 :(得分:1)

我使用自动填充组件解决了这个问题。带有dropdown =“true”属性的Primefaces自动完成组件就像一个菜单一样。

答案 2 :(得分:1)

正如旁注:primefaces文档在语义上没有说出任何关于参数的内容。它也没有提到标签的来源(事实上,文档提及"项目值"这不是很清楚)。

事实上,我使用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}"

希望它可以帮助任何人:。)