如何从控制器中的params中提取列表

时间:2012-11-21 10:49:28

标签: grails groovy

我有一个从视图传入的列表列表,如下所示:

[lists:[["e","q"],["t","w"]], action:save, controller:newReport]

在我的控制器中

def lists = params.lists;

列表将是一个字符串,其值为“[[”e“,”q“],[”t“,”w“]]”

我应该如何遍历列表来获取每个子列表?

2 个答案:

答案 0 :(得分:3)

使用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更安全。这样您就不必考虑如何保护它或如何使用正则表达式来解析字符串。

答案 1 :(得分:0)

Grails有一个很好的type conversion,可以在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 :如果用户发送了其他不期望的内容,这可能会很危险。您可以按照this post

中的说明保护您的GroovyShell