Я пытаюсь сделать привязку данных по умолчанию для работы с объектом команды, у которого есть список объектов домена.Это классы доменов и объекты команд из примера проекта, который я создал, а не мои окончательные домены.
package testbinding
import grails.validation.Validateable
@Validateable
class SelectionCommand implements Serializable {
List<Book> books
Author author
}
С книгой и автором:
package testbinding
class Book {
Long id
String name
static constraints = {
}
}
package testbinding
class Author {
Long id
String name
static constraints = {
}
}
Контроллер:
def index(SelectionCommand command) {
println command
if (command?.hasErrors()) {
println command?.errors
}
[command: command]
}
Если у меня есть форма, использующая индексы для домена книги, привязка верна.Например:
<label>Books</label>
<input name="book[0].id" value="1"/>
<input name="book[1].id" value="2"/>
<label>Author</label>
<g:select name="author.id" value="${1L}" from="${Author.list()}" optionKey="id" optionValue="name"/>
<button type="submit">Submit</button>
Это связывает правильно, но мне нужно, чтобы книга была раскрывающимся, поэтому я не могу ее проиндексировать.
При использовании:
<label>Books</label>
<g:select name="books" from="${Book.list()}" multiple="true" optionKey="id" optionValue="name" value="${[1L, 2L]}"/>
<label>Author</label>
<g:select name="author.id" value="${1L}" from="${Author.list()}" optionKey="id" optionValue="name"/>
<button type="submit">Submit</button>
Я не могу правильно получить привязку.Я пробовал с name="books"
и name="books.id"
, и с обоими я получаю ошибки проверки.
Мой пример проекта использует Grails 2.3.9, но у меня были те же проблемы в 2.3.11.
Для этого существует старая проблема , но она должна была быть решена в 2.3.x.