用于多选值的DataBinding

时间:2014-05-16 13:28:22

标签: grails

如果我有一个具有一对多关联的域对象和一个使用的相应编辑视图 <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默认值(-1null不执行此操作)

1 个答案:

答案 0 :(得分:-1)

支持多选绑定:

但是,请确保如果选择一个发送的值是String,如果你选择,则多个值将是字符串或arraylist的列表。

For more see question here :

<g:select name="dhrsX.id" 
          from="${DeviceHistoryRecord.list()}"
          multiple="multiple"
          optionKey="id"
          value="${customerSiteInstance?.dhrs*.id}"/>