0

在 Grails 2.2 中工作

我有一种情况,我需要能够处理视图中未知数量的委员会成员。这些都需要创建和显示。

每一个都有通常的属性——姓名、地址、联系信息、用户ID。

我知道如果我将表单字段命名为相同的名称,Grails 将返回一个集合供我迭代。但是,在这种情况下,我面临这种情况:

cm_firstname

cm_lastname

cm_address

cm_email

cm_userid

那么这是否意味着我将获得每个字段的集合?这并不有用,因为无法将各种名字与正确的姓氏等相关联。

我很喜欢 Grails,期待您的反馈。

4

2 回答 2

1

您可以使用Grails Command 对象为您完成这项工作。这是 SO question 中的一个示例。基本上,您将通过数据绑定将其中的一个集合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'])
  }
}
于 2013-05-21T16:07:12.620 回答
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>
}
于 2013-05-21T18:49:47.450 回答