【问题标题】:Filtering for value not equal with FilterMeta过滤与 FilterMeta 不相等的值
【发布时间】:2021-08-13 07:33:39
【问题描述】:

我正在尝试将 Primefaces Datatable 迁移到延迟加载,但我发现一些过滤问题。使用非惰性Datatable,过滤只是将所有值从数据库加载到一些ArrayList,然后用Java stream() 或其他任何我想要的过滤它们。但是对于 LazyDataModel,过滤器必须全部指定为 FilterMeta 对象,用于构建对 BD 的查询,因此只从 DB 加载需要的数据。

听起来不错,简单的过滤很容易实现,如下所示:

FilterMeta fm=FilterMeta.builder()
                .field("status")
                .filterValue(CustomerStatus.NEW)
                .matchMode(MatchMode.EQUALS)
                .build();

当我想实现更复杂的过滤器时,问题就来了。例如,想要过滤不同于而不是相等的值似乎是不可能的事情。查看可能的 MatchMode 值,没有不等式运算符。只有可能的值是:

CONTAINS     
ENDS_WITH    
EQUALS   
EXACT    
GLOBAL   
GREATER_THAN     
GREATER_THAN_EQUALS  
IN   
LESS_THAN    
LESS_THAN_EQUALS     
RANGE    
STARTS_WITH

我可以做一些逻辑练习,比如结合两个不同的过滤器 value>5value<5 来模仿 value!=5 的行为,但它看起来像很脏的代码。

知道我在这里缺少什么吗?明显的解决方案是 FilterMeta 实现某种 not()invert() 方法,但我还没有找到类似的方法。

谢谢!

【问题讨论】:

标签: jsf primefaces lazy-loading primefaces-datatable


【解决方案1】:

在将其作为功能请求报告后,Primefaces 11 中添加了新的否定运算符:https://www.primefaces.org/primefaces-11-0-0-released/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2015-07-06
    相关资源
    最近更新 更多