1

私はいくつかの動的フィルタリングに取り組んでおり、これがあります:

class Filterable {
    def statusId
    def secondaryFilterable
}
...
def filter = new Filter(validIds: [1], fieldName: 'statusId')
...
class Filter {

    def validIds = [] as Set
    def fieldName
    private boolean containsFieldValue(input) {
        def fieldValue = input."${fieldName}"
        return fieldValue in validIds
    }
}

これは、1 つのプロパティで問題なく機能します。ただし、次のようなフィルター可能なセカンダリでフィルター処理する必要があります

def filter = new Filter(validIds: [1], fieldName: 'secondaryFilterable.statusId')

をスローしgroovy.lang.MissingPropertyExceptionます。何かアドバイス?

4

1 に答える 1

2

引用符で囲まれたプロパティは、ドットがプロパティ名の一部であると想定しています。

簡単な解決策は次のとおりです。

...
def fieldValue = fieldName.split(/\./).inject(input){ parent, property -> parent?."$property" }
...

これにより、子プロパティのドット表記を使用してフィールド値が再帰的に検索されます。

ここでは、Groovy Web コンソールに実際の例を示します。

于 2012-07-13T10:16:50.110 に答える