-1

Web からデータを取得しています。必要なフィールドを変数に入れることができました。それらをコレクションに入れるにはどうすればよいですか?エキスパンドを使用する必要がありますか? 私はモデルクラスを持っていません。ある種のコレクションを使用して、それらを GSP ページに出力することを考えています。

4

3 に答える 3

3

Groovy Mapsを使用できます。 [foo1: bar1, foo2: bar2, .....]

Expando は、動的オブジェクトの作成に役立ちます。

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 を使用することは可能ですが、お勧めしません。マップ ([:]) は、同じ量の機能を提供し、一般的に使いやすくなっています。また、コレクション、この場合はマップのみを使用してデータを転送することは、本当に悪い習慣だと思います。ただし、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 ページで「結果」名を使用して参照できるモデルを返し、またはを使用して結果の内容をループできます。

于 2013-05-16T18:50:55.937 に答える