1

我正在尝试将 Primefaces 迁移Datatable到延迟加载,但我发现一些过滤问题。使用 non-lazy Datatable,过滤只是将所有值从数据库加载到 some ArrayList,然后用 Javastream()或其他任何我想要的方式过滤它们。但是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()方法,但我没有发现任何类似的东西。

谢谢!

4

1 回答 1

0

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

于 2022-02-16T13:09:57.300 回答