我正在从网络中提取数据。我设法将我需要的字段放在变量中。我怎么把它们放在一个集合中?我应该使用expandos吗?我没有模特课。我正在考虑使用某种类型的集合,然后在我的GSP页面中打印出来。
答案 0 :(得分:3)
您可以使用Groovy Maps。
[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。
答案 1 :(得分: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页面中的“结果”名称进行引用,您可以使用或循环遍历结果的内容。
答案 2 :(得分:0)
根据本网站的某些人的建议,我最终使用的是
def List = []
//Grabbed everything i needed here and then added to the List
List << ["Id": Id,"Name":Name]
//Return the list