从3个选项转到2个选项时,Grails multi-select不保存选项

从3个选项转到2个选项时,Grails multi-select不保存选项,grails,has-many,multi-select,Grails,Has Many,Multi Select,我有一个与域对象属性有很多关系的域对象类别 class Category { static hasMany = [attributes: Attribute] ... } 我使用脚手架生成了一个多选框 <g:select name="attributes" from="${Attribute.list()}" multiple="multiple" optionKey="id" size="5" value="${categoryInstance?.attributes*

我有一个与域对象属性有很多关系的域对象类别

class Category {
    static hasMany = [attributes: Attribute]
    ...
}
我使用脚手架生成了一个多选框

<g:select name="attributes" from="${Attribute.list()}" multiple="multiple" optionKey="id" size="5" value="${categoryInstance?.attributes*.id}" class="many-to-many"/>
我可以使用这个选择框来选择1、2、3等选项

但如果选择了3个选项,而我选择了2个选项,则不会保存这些选项。它仍将具有以前选择的3个选项。从4个选项变为3个选项时也会发生同样的情况

当我返回到选择1选项时。一切都恢复正常了

其他人也有同样的问题吗

这是一只已知的虫子吗?我找不到它


有解决方法吗?

当只选择了1个选项时,@Renso发布的解决方法对我不起作用,它最终以1属性的每个字符作为它而不是id的单个字符串进行迭代。下面是我所做的考虑

categoryInstance.attributes.clear()
if(params.attributes instanceof String) params.attributes = [params.attributes]
params.attributes.each { it -> categoryInstance.attributes.add(Attribute.findById(it as Long)) }

你有没有检查过,它实际上是被提交的,例如,使用firebug之类的web开发工具,你有没有检查你的类别。保存错误呼叫?是的,我有。新ID已提交。更新不包含错误。它只是集合中的旧属性。新ID位于参数中。所以我确实找到了解决办法,但我不喜欢。categoryInstance.attributes.clear params.attributes.each{it->categoryInstance.attributes.addAttribute.FindByEdit as Long}