我正在使用旧版本的 grails (1.1.1),并且正在为政府客户开发旧版应用程序。
这是我的问题(以伪形式):
我有一个域是一本书。它有一个 Author 类型的子域与之关联(1:many 关系)。 Author 域有一个 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']
如何动态调用以下代码-
booklist.eachWithIndex(){
key, value ->
println key.fields
}
目的是我可以创建字段映射并使用循环快速显示所有数据,而无需手动键入所有字段。
注意 - 字符串中的句点
'author.lastName'
尝试输出 key 时抛出错误 ['author.lastName']
也。
最佳答案
我不记得 Grails 1.1 附带的 Groovy 版本,但是有许多语言结构可以做这样的事情。如果它是旧版本,有些东西可能不可用 - 所以你的里程可能会有所不同。
映射键可以用引号字符串引用,例如
def map = [:]
map."person.name" = "Bob"
以上将在 map 中有一个 person.name 键。
映射可以包含任何东西,包括 Groovy 中的混合类型——所以如果你使用更复杂的键,你真的只需要解决字符串转义或其他特殊情况。
您也可以在上面使用 GString
def map = [:]
def prop = "person.name"
map."${prop}" = "Bob"
您还可以通过其上的属性字段动态地从类中获取属性/值的映射。例如。:
class Person { String name;String location; }
def bob = new Person(name:'Bob', location:'The City')
def properties = bob.properties
properties.each { println it }
关于grails - Groovy 动态列表交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617916/