没有索引就无法将列表绑定到命令对象

时间:2018-10-05 23:26:22

标签: grails command-objects

我正在尝试使默认数据出价与具有域对象列表的命令对象一起使用。这是我创建的示例项目中的域类和命令对象,而不是我的最终域。

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中也遇到了同样的问题。

为此有一个旧的issue,但应该在2.3.x中解决。

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。在Grails 2到2.4.4(https://github.com/grails/grails-core/issues/1380)中,这显然仍然是一个问题。