如果我有一个具有一对多关联的域对象和一个使用的相应编辑视图
<g:select multiple="true" ...>
标签。我怎样才能解除所有“很多”对象的关联?
在控制器中,我有以下代码行来更新对象:
objectInstance.properties = params
问题是如果我取消选择html表单中的所有内容并提交它,那么给定的属性将不会包含在params中。由于该属性不在params
中,因此绑定机制不会对此集合执行任何更新。
一个简单的解决方法是始终在控制器中检查可能已清除的集合:
if(!params.someCollection){
params.someCollection = []
}
objectInstance.properties = params
在这种情况下,数据绑定机制会根据需要清除集合。
但如何更通用呢?我不想对我已经拥有的每个控制器中的每个集合进行检查。
我查看了g:select中的noSelection属性(我或许可以使用一个专用的选项,这将是'none'),但它不是很有用。首先,我必须为此字段实现require at least one
逻辑,其次,必须在控制器中以某种方式处理noSelection默认值(-1
或null
不执行此操作)
答案 0 :(得分:-1)
支持多选绑定:
但是,请确保如果选择一个发送的值是String,如果你选择,则多个值将是字符串或arraylist的列表。
<g:select name="dhrsX.id"
from="${DeviceHistoryRecord.list()}"
multiple="multiple"
optionKey="id"
value="${customerSiteInstance?.dhrs*.id}"/>