1

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 ですが、同様のものは見つかりませんでした。

ありがとう!

4

1 に答える 1