我有一个从视图传入的列表列表,如下所示:
[lists:[["e","q"],["t","w"]], action:save, controller:newReport]
在我的控制器中
def lists = params.lists;
列表将是一个字符串,其值为 "[["e","q"],["t","w"]]"
我应该如何遍历列表以获取每个子列表?
使用 JSON.parse:
groovy:000> lists = JSON.parse("[['e', 'q'], ['w', 'q']]")
===> [["e","q"],["w","q"]]
groovy:000> lists.each { list -> println list }
[e, q]
[w, q]
===> [["e","q"],["w","q"]]
groovy:000> lists[0].each { entry -> println entry }
e
q
===> ["e","q"]
这比 GroovyShell 安全得多。这样您就不必考虑如何保护它或如何使用正则表达式来解析字符串。
Grails 有一个很好的类型转换,你可以在params
.
你试过params.list('lists')
吗?
编辑:
现在在这里尝试,在您的情况下,您可以评估要在列表中转换的表达式:
params.lists = '[["e","q"],["t","w"]]'
def listValues = new GroovyShell().evaluate(params.lists)
listValues.each { list ->
println list
println list.class.canonicalName
}
EDIT2:如果用户发送其他不期望的内容,这可能会很危险。您可以按照本文中的说明保护您的 GroovyShell 。