4

在我系统的一个地方,我执行以下操作,它可以正常工作:

   log.debug params."${tagType}"_${i}" //resolves to, e.g : params.title_0

此外,以下方法也有效:

log.debug params."${'setTagtypesList[0].tagtype.id'} // hard coded 0 index

(请注意,上面解析为params.'setTagtypesList[0].tagtype.id'并且单引号是必需的。)

但是,随后的 params 请求会导致 NULL:

def someInt = 0
log.debug params."'setTagtypesList[someInt].tagtype.id'" //dynamic index

那么如何动态创建包含数组语法的参数名称呢?我正在使用 Grails 1.3.9。

4

1 回答 1

3

有多种方法可以实现您想要的,包括:

params."setTagtypesList[${someInt}].tagtype.id"
params['setTagtypesList[' + someInt + '].tagtype.id']

这两者最终都是简写

params.get('setTagtypesList[' + someInt + '].tagtype.id')

使用 GStrings 要记住的是,里面${}的任何东西都是 Groovy 表达式,大括号之外的东西都是字面意思。

但是请注意

params["setTagtypesList[${someInt}].tagtype.id"]

可能不起作用,因为它正在使用 GString 键而不是字符串查找地图条目。属性访问点符号toString()在查找之前对键进行隐式处理,这是您需要了解字符串和 GString 之间区别的情况之一。

于 2012-08-24T22:53:03.877 回答