1

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

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

在我的控制器中

def lists = params.lists;

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

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

4

2 回答 2

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

于 2012-11-22T09:33:59.557 回答
0

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 。

于 2012-11-21T11:25:48.110 回答