У меня есть простая проблема. Мне нужно управлять коллекцией hasMany на объекте домена. Я думал, что делаю это правильно, но это не сработало. Я нашел еще один пост, но она очень устарела и не работает (Handling parameters from dynamic form for one-to-many relationships in grails)Как управлять отношением друг к другу - grails
class User{
static hasMany = ['prefs': Preference]
}
class Preference{
Boolean email
Boolean site
Date dateCreated
Date lastUpdated
}
GSP
<g:each var="t" in="${user.prefs}" status="idx">
<li>
<input type='hidden' name="prefs[${idx}].id" value="${t.id}"/>
Email: <g:checkBox name="prefs[${idx}].email" value="${t.email}" />
Site: <g:checkBox name="prefs[${idx}].site" value="${t.site}" /><
</li>
</g:each>
Контроллер:
log.info(user.prefs)
user.properties = params
if(!user.save()){ ... }
Это то ошибки из:
UserController - [Предпочтение: 3, предпочтение: 4]
Ошибка 2013-06-04 21: 54: 41,405 [HTTP-био-8080-Exec-12] ОШИБКА errors.GrailsExceptionResolver
IndexOutOfBoundsException произошел при обработке запроса: [POST]/пользователь/Prefs - параметры: префы [0] .EMAIL:
ID: 2
префы [1] .Выходные: на
префов [0] .EMAIL: на
_prefs [1] .Выходные:
_prefs [1] .EMAIL:
prefs [1] .id: 3
_prefs [0] .site:
p рефов [0] .Выходные: на
префов [0] .id: 4
индекс: 1, размер: 1. StackTrace следующим образом:
сообщение: Индекс: 1, размер: 1
Не удалось ли сохранить пользователя после установки свойств?журналы для 'user.prefs' никогда не показывали' id' 1 и 2. Можете ли вы показать код контроллера и URL-адрес POST? BTW, если вас беспокоит конкретный порядок, который должен быть показан в gsp, добавьте «List prefs» в домене «Пользователь». Добавление 'prefs' в качестве элементов в список в' User' поддерживает индекс. – dmahapatro
Журналы для user.prefs показывают 'UserController - [Предпочтения: 3, Предпочтения: 4]', которые, как оказалось, являются двумя назначенными. Его не показывает idx, и он показывает ключ surroget. – Nix
Можем ли мы взглянуть на действие контроллера? – dmahapatro