如何动态创建包含数组语法的参数名称

时间:2012-08-24 18:22:46

标签: grails

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

   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

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

1 个答案:

答案 0 :(得分: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键而不是String的映射条目。在查找之前,属性访问点表示法在键上执行隐式toString(),这是您需要了解字符串和GS字符串之间差异的情况之一。