使用Grails 2.2
我有一种情况,我需要能够在视图中处理未知数量的委员会成员。这些都需要创建和显示。
每个人都有通常的属性 - 姓名,地址,联系信息,用户ID。
据我所知,如果我将表单字段命名为相同名称,Grails将返回一个集合供我迭代。然而,在这种情况下,我遇到了这种情况:
cm_firstname
cm_lastname
cm_address
cm_email
cm_userid
这是否意味着我将获得每个领域的集合?这没有用,因为没有办法用正确的姓氏来核心各种名字等。
我很享受Grails,期待您的反馈。
答案 0 :(得分:1)
您可以使用Grails Command objects为您完成此项工作。这是SO问题中的an example。基本上,您将拥有一个CommitteeMembers
的集合,它将在您的控制器数据绑定中填充。
正如@Gregg所说,在视图中你需要字段才能有索引。
class MyDomain {
String name
}
class MyDomainCommand {
List<MyDomain> instances = ListUtils.lazyList([], FactoryUtils.instantiateFactory(MyDomain))
}
class MyController {
def save() {
MyDomainCommand command = new MyDomainCommand()
bindData(command, params, [include: 'instances'])
}
}
答案 1 :(得分:0)
我会告诉你我做了什么,这可能是也可能不是最好的选择。我这样做主要是因为我不喜欢数据绑定。
以你的情况为例,我会命名我的字段:“cm.firstName,cm.lastName,cm.address,cm.email,cm.userId”。
如果您在服务中:
GrailsWebRequest webUtils = WebUtils.retrieveGrailsWebRequest()
List committeeMembers = [].withDefault {new GrailsParameterMap([:], webUtils.getCurrentRequest())}
在控制器中:
List committeeMembers = [].withDefault {new GrailsParameterMap([:], request)}
然后
params.cm.each { k, v ->
if (v instanceof String[]) {
v.eachWithIndex { val, idx ->
committeeMembers[idx]."$k" = val
}
}
else {
committeeMembers[0]."$k" = v
}
}
然后你可以这样做:
committeeMembers.each {
<Create from it.firstName, it.lastName, etc>
}