我有从网络上提取的数据。我已经设法将我需要的字段放入变量中。我如何将它们放在一个集合中?我应该使用expandos吗?我没有模特课。我正在考虑使用某种集合,然后在我的 GSP 页面中打印出来。
问问题
175 次
3 回答
3
您可以使用Groovy 地图。
[foo1: bar1, foo2: bar2, .....]
Expandos 对于创建动态对象很有用。
def myExpando = new Expando()
myExpando.name = "Test User"
myExpando.app = "Grails"
myExpando.task = {
"Hello, $name. Have you read the $app docs yet?"
}
println myExpando.task()
myExpando.app = "Groovy"
println myExpando.task()
输出:
Hello, Test User. Have you read the Grails docs yet?
Hello, Test User. Have you read the Groovy docs yet?
如果您需要在视图层中使用上述动态属性,您可以使用 Expando。
于 2013-05-16T18:22:27.823 回答
1
可以使用 Expando,但不推荐。地图 ([:]) 提供相同数量的功能并且通常更易于使用。另外,我认为仅使用集合(在本例中为 Maps)来传输数据是一种非常糟糕的做法,除非它是 a) 一小部分数据,或者 b) 数据是非结构化的,并且不容易放置成一个模型。
就个人而言,我只会创建类来保存数据。更容易谈论,更容易维护。
一个例子:
class Result {
String name
String value
}
您将在控制器操作中使用它,例如:
def oneResult() {
return [result:new Result(name:'my name', value: 'my value')]
}
或者
def manyResults() {
return [result:[
new Result(name:'my name1', value: 'my value1'),
new Result(name:'my name2', value: 'my value2'),
new Result(name:'my name3', value: 'my value3')
]]
}
它们都将返回一个模型,可以使用 GSP 页面中的“结果”名称来引用该模型,并且您可以使用 or 来循环结果的内容。
于 2013-05-16T18:50:55.937 回答
0
正如本网站上有人建议的那样,我最终使用了类似的东西
def List = []
//Grabbed everything i needed here and then added to the List
List << ["Id": Id,"Name":Name]
//Return the list
于 2013-05-23T17:43:41.267 回答