list - 将多个复选框绑定(bind)到 Grails 中的列表

标签 list grails binding checkbox

这看起来很简单,但显然很难。将一系列(有限且已知长度)复选框绑定(bind)到 grails 命令对象上的 bool 值列表。当然应该可以使用先前选择的值“填充”命令对象以恢复 View 。

例如,我有一个 grails webflow。它首先将 4 个复选框绑定(bind)到 bool 列表中的一个条目。它切换到下一个状态并打印值 - 例如[真实,真实]。向后导航,所有复选框都是空的(这非常有意义 - 4 个复选框,只有两个值)。所以它应该是例如[假,真,假,真]。

无论我做什么,我似乎都无法做到这一点。在 Spring ,这很容易,只需将复选框绑定(bind)到 value[0]..[3]... 为什么在 Grails 中这么简单的事情这么难?!

请帮忙,这真的会让我很开心!

示例命令对象:

class TestCmdObj {    
    List<Boolean> boolListOne = []
}

Controller 中的示例绑定(bind)方法(在流程操作中执行的闭包):
private def doBindAndValidateBoolList = {       
    bindData(flow.testCmdObj, params, [include:['boolListOne']])
}

到现在为止还挺好。这实际上在显示流中的下一页时有效,testCmdObj.boolListOne 为选中的复选框显示 true ..

GSP 代码很简单,使用:
<g:checkBox name="boolListOne"/>
<g:checkBox name="boolListOne"/>
<g:checkBox name="boolListOne"/>
<g:checkBox name="boolListOne"/>

在下一个 View 中,我可以打印出 ${testCmdObj.boolListOne} 并打印出尽可能多的“真实”值,就像我检查的那样......(例如 [true, true])如果我向后导航,复选框是空的。 .. 再说一次,我可以理解,因为它们都具有相同的名称...

最佳答案

好的,所以采取this作为引用:

Grails requires an command with existing list, that will be filled with data from reques.



所以你需要做的是:

类 TestCmdObj {
列表 boolListOne = ListUtils.lazyList([], FactoryUtils.instantiateFactory(Boolean) )
}

此外,您的 gsp 将需要遍历您的命令以显示每个条目,例如:
<g:each in="${myCommandInstance.boolListOne}" var="boolInstance" status="i">
<g:checkbox name="boolListOne[${i}]" value="${boolInstance}" />
</g:each>

这样,您的 gsp 中的每个复选框都将对应为列表中的一个条目。

编辑 :对于原始类型的包装器,似乎不需要使用工厂。

关于list - 将多个复选框绑定(bind)到 Grails 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13827535/

相关文章:

python - 如何对 pandas 数据框中的一列集合中的值进行舍入?

mongodb - Grails GORM动态查找器和条件不适用于MongoDB

binding - 当图像 src 绑定(bind)更改时,knockout js 淡入淡出过渡绑定(bind)处理程序

c++ - Boost.Python 自定义转换器

c++ - 比较指向不同列表的两个列表迭代器

Python 变量赋值

python - 在 Python 中迭代包含元组和 int 的列表

grails - 开发grails应用程序是否需要完整的常规知识?

grails - Grails创建的应用名称(带点)

binding - SSL 主机头 ip 的服务器绑定(bind)设置为 255.255.255.255