【问题标题】:Grails multi-select does not save options when going from 3 to 2 options从 3 个选项变为 2 个选项时,Grails 多选不保存选项
【发布时间】:2014-10-06 11:15:40
【问题描述】:

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

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 选项时。一切都恢复正常了。

其他人有同样的问题吗?

这是一个已知的错误吗? (我没找到)

有解决办法吗?

【问题讨论】:

  • 您检查过,实际已提交(例如使用一些 web 开发人员工具,如 firebug),您检查您的category.save() 调用是否有错误?
  • 是的,我做到了。新的 ID 已提交。更新不包含错误。它只是具有集合中的旧属性。新的 ID 在参数中。所以我确实找到了解决方法,但我不喜欢它。 categoryInstance.attributes.clear() params.attributes.each { it -> categoryInstance.attributes.add(Attribute.findById(it as Long)) }

标签: grails has-many multi-select


【解决方案1】:

@Renso 发布的解决方法在仅选择 1 个选项时对我不起作用,它最终将 1 属性的每个字符迭代为 it 而不是作为 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)) }

【讨论】:

    猜你喜欢
    • 2015-07-24
    • 2019-05-29
    • 2022-07-16
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    相关资源
    最近更新 更多