gpt4 book ai didi

Grails 域构造函数不是 Groovy 构造函数

转载 作者:行者123 更新时间:2023-12-02 14:16:08 25 4
gpt4 key购买 nike

执行这种代码和平

class DefObject{
String a
def b
}

def c = new DefObject(a:1, b:2);

在 Grails 和 Groovy 中产生不同的结果。

时髦的
assert c.a == 1
assert c.b == 2

Grails 域类
assert c.a == 1 
assert c.b == null

如何使 Grails 域接受 b 的值?

最佳答案

这是因为在域类中,只能通过映射构造函数设置“可绑定(bind)”属性。您可以覆盖属性是否可绑定(bind)(例如 id 属性不是出于安全原因,但如果您知道自己在做什么,则可以将其配置为)。

无类型属性,如 b不是持久的,因为如果只是用 def 指定,GORM/Hibernate 无法知道如何存储数据。或 Object .因此它们不可绑定(bind),因为它们不是持久的,并且它们被自定义 map 构造函数忽略。

由于其他原因,这是一个方便的功能,例如它允许 new DefObject(params)在不提示 params 中的查询参数的情况下工作与域类中的属性不对应的映射,例如controlleraction .使用 Groovy 构造函数,如果映射的值与类属性不对应,则 groovy.lang.MissingPropertyException被抛出,但这些在域类中被忽略。

关于Grails 域构造函数不是 Groovy 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43545108/

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