我正在进行一些动态过滤,并且有:
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
。有什么建议吗?
答案 0 :(得分:2)
引用属性假设点是属性名称的一部分。
一个简单的解决方案是:
...
def fieldValue = fieldName.split(/\./).inject(input){ parent, property -> parent?."$property" }
...
这将使用子符号表示子属性以递归方式查找字段值。
Groovy Web控制台上的