繁体   English   中英

一次提交多个grails域对象

[英]Submitting multiple grails domain objects at once

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

为了获得更好的图像,窗体大致如下所示: 在此处输入图片说明

我想出了一种解决方案,将每个记录映射到一个表单(从呈现视图的初始操作返回项目列表):

<g:each in="${items}" var="item">
    <g:render template="orderItem" model="[item: item]"/>
</g:each>

和模板:

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

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

实施此方案时,我面临一些挑战:

  1. 有没有更好的方法将每个记录实例映射到视图中的字段行,以便一行字段代表一个记录?
  2. 如何在一次调用控制器动作中传递并验证整个集合?

提前致谢。

您可以使用命令对象来实现 它们是可以处理域实例列表的可验证对象。 例:

命令

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) {
}

相关的SO问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM