PrimefacesDatatableを遅延読み込みに移行しようとしていますが、フィルタリングにいくつか問題があります。non-lazyDatatableでは、フィルタリングはデータベースからいくつかの にすべての値をロードし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>52 つの異なるフィルターを組み合わせて動作value<5を模倣するなど、論理的な体操を行うこともできますがvalue!=5、非常に汚いコードのように見えます。
ここで何が欠けているかについて何か考えはありますか? 明らかな解決策は、何らかの種類のnot()またはinvert()メソッドを実装する FilterMeta ですが、同様のものは見つかりませんでした。
ありがとう!