gpt4 book ai didi

Grails 数据绑定(bind) - 带列表的命令对象

转载 作者:行者123 更新时间:2023-12-02 08:54:31 26 4
gpt4 key购买 nike

Grails 1.3.7

具有列表内容的数据绑定(bind)命令对象出现问题。命令示例:

class Tracker {
String name
String description
List<Unit> units = new ArrayList()
}

class Unit {
String name
Long unitMax
Long unitMin
}

为跟踪器创建 GSP 具有单位字段。一个例子:

<g:textField name="units[0].unitMax" value=""/>

TrackerController保存方法:

 def save = { Tracker trackerInstance ->
trackerInstance = trackingService.saveOrUpdateTracker(trackerInstance)
}

但是,总是 java.lang.IndexOutOfBoundsException

或者,如果我将 Controller 更新为:

def save = {
Tracker trackerInstance = new Tracker()
trackerInstance.properties = params
....

然后 groovy.lang.ReadOnlyPropertyException:无法设置只读属性:类的属性:com.redbrickhealth.dto.Tracker有任何想法吗?

GORM 与 Command 对象中的绑定(bind)似乎存在差异。

也许我需要扩展并注册 Unit 的 PropertyEditorSupport?

-托德

最佳答案

自 Groovy 1.8.7 起,List 接口(interface)有一个名为 withLazyDefault 的方法,可以用来代替 apache commons ListUtils:

List<Unit> units = [].withLazyDefault { new Unit() }

每次使用不存在的索引访问 units 时,都会创建一个新的 Unit 实例。

请参阅documentation of withLazyDefault更多细节。我还写了一个小blog post几天前就谈到过这个问题。

关于Grails 数据绑定(bind) - 带列表的命令对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9709864/

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