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
    }
}

这适用于一个属性。但是,现在我需要通过辅助过滤器进行过滤 - 比如

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 回答