Grails 绑定子项时的IndexOutOfBoundsException

Grails 绑定子项时的IndexOutOfBoundsException,grails,data-binding,gorm,Grails,Data Binding,Gorm,我在Grails2.1.1(简化版)中有以下gsp: 有趣的是,当我删除players[${I}].id参数时,错误消失了,但是两个players的数据被随机交换,因为Grails不知道如何将a播放器从表单匹配到players集合中的一个 有人知道这是怎么回事吗 编辑:这里是一个示例应用程序:回应下面的评论,为团队和玩家编写代码会有所帮助。你的代码片段在2.1.2中对我来说很好,正常的belongsTo/在团队和玩家之间有很多关系,并且玩家定义为团队域类中的列表。示例应用:感谢示例应用。我建议将

我在Grails
2.1.1
(简化版)中有以下gsp:

有趣的是,当我删除
players[${I}].id
参数时,错误消失了,但是两个
players
的数据被随机交换,因为Grails不知道如何将a播放器从表单匹配到
players
集合中的一个

有人知道这是怎么回事吗


编辑:这里是一个示例应用程序:

回应下面的评论,为
团队
玩家
编写代码会有所帮助。你的代码片段在2.1.2中对我来说很好,正常的
belongsTo
/
团队
玩家
之间有很多关系,并且
玩家
定义为
团队
域类中的
列表。示例应用:感谢示例应用。我建议将玩家定义为团队域类中的列表。要做到这一点,只需添加一行:
List players
(不要将
属性更改为
),这应该允许您在绑定期间使用索引引用(
[${i}]
)。此处的更多详细信息:
列出玩家
向数据库表中添加一个
索引
列。。。不能有:(如果没有
列表
定义,GORM在默认情况下使用
集合
,并且不容易保持顺序(如您所发现的,您可以删除
玩家[${i}].id
,但玩家随后会随机交换).如下文所述,Grails 2.3包括许多数据绑定增强功能,如果您可以选择升级,
<g:form ...>
    <g:each in="${team.players}" var="player" status="i">
        <g:hiddenField name="players[${i}].id" value="${player.id}" />
        <g:textField name="players[${i}].name" value="${player.name}" />
        <g:textField name="players[${i}].position" value="${player.position}" />
    </g:each>
</g:form>
def teamInstance = Team.get(params.id)
teamInstance.properties = params // this is where IndexOutOfBoundsException happens
teamInstance.save()