ドメイン オブジェクト リストを持つコマンド オブジェクトで動作するデフォルトのデータ ビディングを作成しようとしています。これは、最終的なドメインではなく、私が作成したサンプル プロジェクトのドメイン クラスとコマンド オブジェクトです。
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]
}
book ドメインのインデックスを使用するフォームがある場合、バインドは正しいです。例えば:
<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 で解決されるはずでした。