2012-09-14 65 views
2

我有我的页面上选择多。用户可以将元素添加到列表中,并选择一个或多个删除它们。选择多个,获得选择的值和非选择的值

当我打通params.selectName选择的价值,我只接收选定的。我明白,这是默认行为,但我需要他们所有人,而不仅仅是选定的元素。

我真的不希望选择所有元素每次发送数据到服务器的时间。有没有人有更好的解决方案?谢谢。

+0

既然你大概都在Grails的应用程序的价值,为什么不只是从数据库的完整列表进行比较选择的名单? – cdeszaq

回答

0

这是一个有点复杂的解决方案应该是什么一个简单的问题,但在我的当前项目,我们只是有同样的问题,并解决它作为@cdeszaq描述。

假设Foo类的一个对象与Bar项,其中每个Bar具有String name并将其输出作为其toString()表示集合(bars),我们这样做在FooController

def removedItems = fooInstance.bars.findAll { 
    !params.bars.collect { it.key }.contains(it.name) 
} 

if(removedItems){ 
    removedItems.each { 
     fooInstance.removeFromBars(it) 
    } 
} 
0

该方法采用<g:checkBox>标记是为了创建一个隐藏字段,其名称与复选框相同,但前面带有下划线。你可以在这里使用了类似的伎俩,即每当你添加新<option><select>您还添加了一个名为隐藏字段(说)selectName_options具有相同的值。然后在控制器中,您可以取params.list('selectName')params.list('selectName_options')之间的差异以从列表中获取未选定的选项。