迭代可能是String或String Array的Groovy对象

时间:2013-01-17 04:15:13

标签: grails groovy

使用Grails和场景是我从HTTP请求传入一个对象,然后遍历该对象并抓取所有可能的对象,如:

if (params.colors) {
  for (String color in params.colors) {
    println color
  }
}

如果传入[Ljava.lang.String(即params.colors = [“blue”,“green”,“yellow”]),那么你的输出是预期的:

blue
green
yellow

但是如果params.colors =“blue”,那么当然,groovy会将“蓝色”标记为“蓝色”并且你会得到输出:

b
l
u
e

我想我应该检查它是否已经是一个数组。除非我接近这个错误或者有一种常规的方法。

1 个答案:

答案 0 :(得分:9)

您可以使用list对象上的params方法将颜色参数作为列表访问:

for (String color in params.list('colors')) {
  println color
}

这样,如果你的动作被称为/your_action?colors=red/your_action?colors=red&colors=green,或者甚至根本没有颜色参数(这就是为什么我遗漏了if),这无关紧要, params.list('colors')将始终返回一个列表:)