в 2015 году ....
Grails теперь работает немного по-другому, и вы можете столкнуться со строками, а не с ожидаемыми вложенными картами. Я получил кое-что для работы, выполнив
что-то вроде ..
params.nested.each{
if(!it.getKey().contains('.')){
//to get a map rather than a string...
params.nested[it.getKey()];
}
};
РЕДАКТИРОВАТЬ: Кстати ... ... 1006 *
входы с одинаковыми именами, например
<input name="item.choice" type="checkbox" value="3" />
< input name="item.choice" type="checkbox" value="4"/>
Помещается в список, если отправлено более одного. Так что, если оба из вышеупомянутых были проверены
<input name="item.choice" type="checkbox" value="3" checked />
< input name="item.choice" type="checkbox" value="4" checked/>
Вы получите список.
Но если отмечен только один, вы НЕ получаете Список (по крайней мере, в версии Grails, которую я использую), вы получаете одно значение.
<input name="item.choice" type="checkbox" value="3" checked />
< input name="item.choice" type="checkbox" value="4" />
Это означает, что в контроллере, если бы я сделал что-то вроде
params['item.choice'].each{
def item=Item.get(it)
}
Будет выдано сообщение об ошибке, если будет отправлен только один элемент. Один отличный способ обойти это -
([]+(params['item.choice']?:[])).each{
def item=Item.get(it)
}
Если параметр задан, а не список, он помещает значение в пустой список; Если задан параметр и список, оператор плюс добавит все отдельные значения в пустой список; если параметр не задан, он добавит два пустых списка вместе, что создаст один пустой список.