grails - Groovy 动态列表交互

标签 grails dynamic groovy grails-orm

我正在使用旧版本的 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/

相关文章:

authentication - 401 使用 HttpBuilder (Groovy) 未经授权访问 Github API

javascript - 从 gsp 调用 Controller 函数

Grails:从 i18n 消息属性获取消息的首选方法

javascript - 在 jQuery 中操作动态元素

Groovy 注入(inject)没有类似的 Java 8 减少

jenkins - 在 JenkinsFile 中只声明一次 configFileProvider 并从所有阶段引用

grails - 如何在第一个组合框(g:select)的基础上填充第二个组合框(g:select)的值?

grails - 在grails 2.5.1上运行grails 2.2.4

python - SQLAlchemy:从列表动态加载表

css - 如何根据导航悬停更改内容 div