选择“多个”,获取选定的值和未选择的值

时间:2012-09-14 19:35:14

标签: grails

我的页面上有一个选择倍数。用户可以向列表中添加元素,然后选择一个或多个元素。

当我通过params.selectName获取select的值时,我只收到所选的值。一世 明白这是默认行为,但我需要所有这些行为,而不仅仅是选定的元素。

每次向服务器发送数据时,我都不想选择所有元素。有没有人有更好的解决方案?感谢。

2 个答案:

答案 0 :(得分:0)

对于应该是一个简单的问题,这是一个复杂的解决方案,但在我目前的项目中,我们遇到了同样的问题并按照@cdeszaq描述的那样解决了它。

假设某个对象Foo的对象包含barsBar项的集合,其中每个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')之间的差异来从列表中获取未选中的选项。