2013-05-16 5 views
-1

У меня есть данные, которые вытаскиваются из Интернета. Мне удалось поместить нужные поля в переменные. Как я могу поместить их в коллекцию? Должен ли я использовать expandos? У меня нет класса модели. Я думаю об использовании какой-либо коллекции, а затем распечатаю ее на моей странице GSP.Какую коллекцию использовать в контроллере grails?

ответ

1

Использование Expando возможно, но не рекомендуется. Карты ([:]) обеспечивают одинаковое количество функций и, как правило, проще в использовании. Кроме того, я бы счел очень плохой практикой использовать только коллекции, в данном случае Карты, для передачи данных, если это не а) крошечный бит данных, или б) данные неструктурированы и нелегко в модель.

Лично я бы просто создал класс для хранения данных. Легче говорить и легче поддерживать.

Пример:

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') 
    ]] 
} 

Оба они вернутся модель, которая может ссылаться используя имя «result» на вашей странице GSP, и вы можете использовать или перебрать содержимое res ии.

+0

Я пошел с вашим предложением и создал класс модели, поэтому теперь я должен просто добавить данные от моего контроллера в класс правильно? –

+0

Исправить. Я обновил свой ответ на примере –

+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.

+0

Допустим, у меня есть имя, код состояния и адрес электронной почты, что мне нужно, чтобы отобразить в моей GSP странице. Я мог бы в принципе сказать: myExpando.name = varName –

+0

Это правильно. – dmahapatro

0

Как предположил кто-то на этом сайте, я в конечном итоге, используя что-то вроде

def List = [] 

//Grabbed everything i needed here and then added to the List 

List << ["Id": Id,"Name":Name] 

//Return the list 
Смежные вопросы