【发布时间】: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>5 和 value<5 来模仿 value!=5 的行为,但它看起来像很脏的代码。
知道我在这里缺少什么吗?明显的解决方案是 FilterMeta 实现某种 not() 或 invert() 方法,但我还没有找到类似的方法。
谢谢!
【问题讨论】:
-
我想只是想念一些 MatchMode,例如:NOT_EQUALS、NOT_CONTAINS、...。请您创建一个功能请求,以便我们讨论?
标签: jsf primefaces lazy-loading primefaces-datatable