我的页面上有一个选择倍数。用户可以向列表中添加元素,然后选择一个或多个元素。
当我通过params.selectName获取select的值时,我只收到所选的值。一世 明白这是默认行为,但我需要所有这些行为,而不仅仅是选定的元素。
每次向服务器发送数据时,我都不想选择所有元素。有没有人有更好的解决方案?感谢。
答案 0 :(得分:0)
对于应该是一个简单的问题,这是一个复杂的解决方案,但在我目前的项目中,我们遇到了同样的问题并按照@cdeszaq描述的那样解决了它。
假设某个对象Foo
的对象包含bars
个Bar
项的集合,其中每个Bar
都有String name
并将其输出为toString()
表示,我们在FooController
:
def removedItems = fooInstance.bars.findAll {
!params.bars.collect { it.key }.contains(it.name)
}
if(removedItems){
removedItems.each {
fooInstance.removeFromBars(it)
}
}
答案 1 :(得分:0)
<g:checkBox>
标记采用的方法是创建一个隐藏字段,其名称与复选框相同,但前缀为下划线。您可以在此处使用类似的技巧,即每当您向<option>
添加新的<select>
时,您还会添加一个名为(例如)selectName_options
的隐藏字段,其值相同。然后在控制器中,您可以使用params.list('selectName')
和params.list('selectName_options')
之间的差异来从列表中获取未选中的选项。