Привязка данных Grails - PullRequest
       18

Привязка данных Grails

0 голосов
/ 25 июля 2011

Полученный контроллер Grails вызывается со следующими параметрами запроса:

defaultPrice[0].amount  22
defaultPrice[0].currency 1
defaultPrice[0].id  
defaultPrice[1].amount  33
defaultPrice[1].currency 3
defaultPrice[1].id  

Я определил следующий класс команд:

class PriceCommand {
    BigDecimal amount
    Integer currency
    Integer id
}

Я пытаюсь привязать параметры запроса к списку в действии

def save = {List<PriceCommand> defaultPrice ->

}

Но внутри действия defaultPrice равно нулю.

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Требуется команда с существующим списком данных с указанным именем, которая будет заполнена данными из запроса.

Попробуйте

import org.apache.commons.collections.ListUtils
import org.apache.commons.collections.Factory

class PriceListCommand {
   List<PriceCommand> defaultPrice = ListUtils.lazyList([], {new PriceCommand()} as Factory)
}

и используйтеэта команда внутри контроллера.Должно работать

1 голос
/ 25 июля 2011

Я не уверен, что это то, что вы ищете, но это может помочь ...

1.) Я думаю, что индексированные параметры работают только в том случае, если у вас есть отношение родитель-ребенок или один-ко-многим,Например, вам может понадобиться ввести PriceCommandParent, который содержит список PriceCommand. Я могу ошибаться в этом и приветствую любые исправления.

2.) Я обнаружил, что индексированные параметры не так волшебны, как в некоторых других областях Grails / Groovy, поэтомуиногда я бы предпочел разобраться с картированием сам.Ниже рассказывается, как я справлялся с этим в прошлом ...

def things = []

params.each{name, value->
    if (name.matches('^(thing\\[\\d+\\])$')){ //<-- look for 'thing[x]'
        things.add(new Thing(params[name]);
    }   
}

Дайте мне знать, если что-то из этого поможет

...