Ami*_*.io 1 grails groovy constructor
执行这种代码的和平
class DefObject{
String a
def b
}
def c = new DefObject(a:1, b:2);
Run Code Online (Sandbox Code Playgroud)
在Grails和Groovy中产生不同的结果.
Groovy的
assert c.a == 1
assert c.b == 2
Run Code Online (Sandbox Code Playgroud)
Grails Domain Class
assert c.a == 1
assert c.b == null
Run Code Online (Sandbox Code Playgroud)
如何让Grails Domain接受值b?
这是因为在域类中,只能通过映射构造函数设置"可绑定"属性.您可以覆盖属性是否可绑定(例如,id属性不是出于安全原因,但如果您知道自己在做什么,则可以将其配置为).
类似的无类型属性b不是持久的,因为GORM/Hibernate无法知道如何使用def或者指定数据Object.所以它们不可绑定,因为它们不是持久性的,并且它们被定制的地图构造函数忽略了.
由于其他原因,这是一个方便的功能,例如,它允许new DefObject(params)在不抱怨params地图中与域类中的属性不对应的查询参数的情况下工作,例如controller和action.使用Groovy构造函数,如果您对映射中的值不对应于类属性,groovy.lang.MissingPropertyException则抛出a但在域类中忽略这些值.
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |