过滤不等于FilterMeta的值



我试图将PrimefacesDatatable迁移到延迟加载,但我发现一些过滤问题。对于非惰性Datatable,过滤只是将所有值从数据库加载到一些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()方法,但我还没有发现任何类似的。

谢谢!

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

相关内容

  • 没有找到相关文章

最新更新