gpt4 book ai didi

jsf - 数据表中的 Primefaces 自定义过滤器

转载 作者:行者123 更新时间:2023-12-02 04:38:21 26 4
gpt4 key购买 nike

是否可以为数据表编写自定义过滤器?

我想过滤有关属性 status_flag 的数据。此 status_flag 可以具有以下值:available、enable、disabled。

我需要一个过滤方法,它可以显示总列表或没有禁用的总列表。

最佳答案

对于 Primefaces 5,有一个新属性 filterFunction,可以在 Java 代码中定义自定义过滤器:http://blog.primefaces.org/?p=3084

但是,过滤器输入仍然是输入文本中的字符串。

如果您需要自定义组件来输入过滤器值,或者您无法使用 Primefaces 4(就像我最近的一个项目一样),我将描述对我有用的组件。

我使用这些关键步骤扩展了过滤行为

  • 将普通的 JSF 输入组件放入列的标题方面,而不是使用 filterBy 属性
  • 将一个 JavaScript 回调附加到此组件,该回调在用户输入时触发,该回调将调用 PF('dataTableWidgetVar').filter()
  • 将filteredValue属性添加到dataTable,这会在现有过滤器之上应用Java setter中的自定义过滤器

关键是利用filteredValue属性 - 当调用Primefaces filter()函数或当primefaces过滤器更改时,filteredValue设置为列出过滤值(如果没有应用过滤器则设置为null)。然后Primefaces从getter读取filteredValues来更新dataTable中的项目列表。如果我们将过滤器放在这些调用之间(无论是在 getter 还是 setter 中,setter 效率更高,因为它仅在过滤器更改时调用),我们用过滤器修改原始过滤列表,并通过 getter 返回它。

一些代码:

以 inputText 作为过滤器组件的数据表的定义:

<p:dataTable filteredValue="#{view.filteredResults} >
...
<p:columnGroup type="header">
...
<p:row>
...
<p:column>
<f:facet name="header">
<p:inputText value="#{view.filterValue}" />
</f:facet>
</p:column>

...
</p:dataTable>

名为view的 View 中filteredResults的Java Setter和Getter:

public void setFilteredResults(List<?> filteredResults) {
this.filteredResults = applyPremiumFilters(filteredResults, filterValue);
}

public List<?> getFilteredResults() {
return this.filteredResults;
}

其余部分是 Javascript 代码,用于在过滤器组件中的值更改时对数据表应用过滤器。

关于jsf - 数据表中的 Primefaces 自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22096669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com