在grails控制器中使用什么样的集合?

时间:2013-05-16 17:52:28

标签: list grails collections groovy controller

我正在从网络中提取数据。我设法将我需要的字段放在变量中。我怎么把它们放在一个集合中?我应该使用expandos吗?我没有模特课。我正在考虑使用某种类型的集合,然后在我的GSP页面中打印出来。

3 个答案:

答案 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