-1

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

4

3 回答 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 回答