1

ドメイン オブジェクト リストを持つコマンド オブジェクトで動作するデフォルトのデータ ビディングを作成しようとしています。これは、最終的なドメインではなく、私が作成したサンプル プロジェクトのドメイン クラスとコマンド オブジェクトです。

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 で解決されるはずでした。

4

1 に答える 1