Grails使用gstrings访问嵌套字段

时间:2011-10-16 12:36:33

标签: grails groovy gstring

我试图使用gstring访问嵌套字段,但它抛出异常groovy.lang.MissingPropertyException

我有两个班级

Class Person{
   Address address
}
Class Address{
  String city
}

在我的代码的某处,我正在做,

def person = Person.get(1)
def field = "address.city"
def city = person."${field}"

我试图从人那里取城的行是扔groovy.lang.MissingPropertyException

如果我尝试使用gstring获取直接属性,它可以工作,但上面给出的代码不起作用。

任何帮助?

2 个答案:

答案 0 :(得分:11)

您在这里所做的是尝试按名称address.city访问属性,该属性等于person."address.city",这意味着此处的点被视为属性名称的一部分 - 而不是访问分隔符如你所料。以下代码应解析您的属性:

def city = field.tokenize('.').inject(person) {v, k -> v."$k"}

答案 1 :(得分:3)

我认为问题在于使用点运算符来访问子属性。

这有效:

class Person{
   String address
}

def person = new Person(address:'Madrid')

def field = 'address'
assert 'Madrid' == person."${field}"

这有效:

class Person{
   Address address
}

class Address {
  String city
}

def person = new Person(address: new Address(city: 'Madrid'))

def field = 'address'
def subField = 'city'
assert 'Madrid' == person."${field}"."${subField}"