这看起来很简单,但显然很难。将一系列(有限且已知长度)复选框绑定(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/