gpt4 book ai didi

forms - 一次提交多个grails域对象

转载 作者:行者123 更新时间:2023-12-02 13:52:28 24 4
gpt4 key购买 nike

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

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

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

<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>

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

在实施此方案时,我面临一些挑战:
  • 是否有更好的方法将每个记录实例映射到 View 中的字段行,以便一行字段代表一个记录?
  • 如何在一次调用 Controller Action 中传递并验证整个集合?

  • 提前致谢。

    最佳答案

    您可以使用command objects做到这一点。它们是可以处理域实例列表的可验证对象。例:
    命令

    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) {
    }
    Related SO question.

    关于forms - 一次提交多个grails域对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19406065/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com