Forms 一次提交多个grails域对象

Forms 一次提交多个grails域对象,forms,validation,grails,model-view-controller,domain-object,Forms,Validation,Grails,Model View Controller,Domain Object,我有一个表单,用户可以在其中输入相同域类的许多记录。提交后,应对这些记录进行验证。如果验证成功,则应将记录集合传递给另一个视图,否则应在同一视图中显示验证错误,保留以前输入的值。应使用专用命令对象进行验证 为了制作更好的图片,表单大致如下所示: 我提出了一个将每条记录映射到表单的解决方案(items list从呈现视图的初始操作返回): 以及模板: <form> ... <g:textField value="${item.url}" name="url"

我有一个表单,用户可以在其中输入相同域类的许多记录。提交后,应对这些记录进行验证。如果验证成功,则应将记录集合传递给另一个视图,否则应在同一视图中显示验证错误,保留以前输入的值。应使用专用命令对象进行验证

为了制作更好的图片,表单大致如下所示:

我提出了一个将每条记录映射到表单的解决方案(items list从呈现视图的初始操作返回):


以及模板:

<form>
    ...
    <g:textField value="${item.url}" name="url"></g:textField>
    ...
</form>

...
...
但我不确定这种方法的正确性

在实施此场景时,我几乎没有遇到什么挑战:

  • 是否有更好的方法将每个记录实例映射到视图中的字段行,以便一行字段表示一条记录
  • 如何在一次对控制器操作的调用中传递和验证整个集合
  • 提前感谢。

    您可以使用。它们是可验证的对象,可以处理域实例列表。例如:

    命令

    您可以使用。它们是可验证的对象,可以处理域实例列表。例如:

    命令

    <form>
        ...
        <g:textField value="${item.url}" name="url"></g:textField>
        ...
    </form>
    
    import org.apache.commons.collections.ListUtils
    import org.apache.commons.collections.Factory
    
    @Validateable
    class ItemsCommand {
      List<Item> items = ListUtils.lazyList([], {new Item()} as Factory)
    }
    
    <g:each in="${command.items}" var="item" status="i">
      <g:textField name="items[$i].url" value="${item.url}" />
      ...
    </g:each>
    
    //this is the submit action, the command will have the Item 
    //instances though Data Binding.
    def myAction(ItemsCommand command) {
    }