Grails Groovy动态列表交互

Grails Groovy动态列表交互,grails,dynamic,groovy,gorm,Grails,Dynamic,Groovy,Gorm,我使用的是较旧版本的grails(1.1.1),我正在为一个政府客户机开发一个遗留应用程序 以下是我的问题(以psuedo的形式): 我有一个域名是一本书。它有一个类型为Author的子域与之关联(1:many relationship)。作者域具有firstName和lastName字段 def c = Book.createCriteria() def booklist = c.listDistinct { author { ord

我使用的是较旧版本的grails(1.1.1),我正在为一个政府客户机开发一个遗留应用程序

以下是我的问题(以psuedo的形式):

我有一个域名是一本书。它有一个类型为Author的子域与之关联(1:many relationship)。作者域具有firstName和lastName字段

def c = Book.createCriteria()
      def booklist = c.listDistinct {
          author {
              order('lastName', 'asc')
              order('firstName', 'asc')
          }
}
假设我有一个字段列表,我想稍后用于excel导出。此列表包含作者域调用和我要使用的列的标题

Map fields = ['author.lastName' : 'Last Name', 'author.firstName', 'First Name']
如何动态调用以下代码--

其目的是,我可以创建字段地图,并使用循环快速显示所有数据,而无需手动键入所有字段


注意-字符串
'author.lastName'
中的句点在尝试输出键
['author.lastName']
时也会引发错误。

我不记得Grails1.1附带的Groovy版本,但有许多语言构造可以执行类似的操作。如果是旧版本,有些东西可能不可用-因此您的里程可能会有所不同

映射键可以用引号字符串引用,例如

def map = [:]
map."person.name" = "Bob"
上面的将在地图中有一个person.name键

映射可以包含任何内容,包括Groovy中的混合类型——因此,如果您使用的是更复杂的键,那么您实际上只需要处理字符串转义或其他特殊情况

您还可以在上面的示例中使用GString

def map = [:]
def prop = "person.name"
map."${prop}" = "Bob"
您还可以通过类上的properties字段动态获取类的属性/值映射。例如:

class Person { String name;String location; }
def bob = new Person(name:'Bob', location:'The City')
def properties = bob.properties
properties.each { println it } 

我认为这基本上是同一个问题
class Person { String name;String location; }
def bob = new Person(name:'Bob', location:'The City')
def properties = bob.properties
properties.each { println it }