域构造函数上缺少瞬态属性(带有映射参数)
Missing transient properties on Domain constructor (with mapped parameters)
在域 类 上使用地图自动创建不会填写临时属性:
class Address {
String street
String number
static transients = ["number"]
}
def address = new Address(street: "King's Street", number: "23")
println address.street //King's Street
println address.number //null
有什么好的理由吗? Grails 域实例化会覆盖默认的 Groovy 行为吗?
你可以通过两种方式完成。
如果要让transient成为一个字段,需要绑定。
class Address {
String street
String number
static constraints = {
number bindable: true, nullable:true
}
static transients = ['number']
}
您可以使用一些getter方法绑定它。
class Address {
String street
String number
String getDifferentNumber() { number }
static transients = ['differentNumber']
}
希望对您有所帮助。享受吧。
Is there any good reason for that?
是的。这是自 Grails 2.0.2 以来的行为。默认情况下不可绑定的属性是与瞬态字段、动态类型属性和静态属性相关的属性。在 https://spring.io/blog/2012/03/28/secure-data-binding-with-grails.
上有一些关于此的讨论
Grails domain instantiation overrides the default Groovy behaviour?
是的。这允许做一些在网络应用程序中常见的事情,比如以一种允许将一堆字符串(请求参数)绑定到对象图所需的大量灵活性的方式将请求参数绑定到域实例.
如果你真的想绑定到瞬态 属性 你所要做的就是将 属性 配置为可绑定:
class Address {
String street
String number
static transients = ["number"]
static constraints = {
number bindable: true
}
}
参见 http://grails.github.io/grails-doc/2.4.5/ref/Constraints/bindable.html。
希望对您有所帮助。
在域 类 上使用地图自动创建不会填写临时属性:
class Address {
String street
String number
static transients = ["number"]
}
def address = new Address(street: "King's Street", number: "23")
println address.street //King's Street
println address.number //null
有什么好的理由吗? Grails 域实例化会覆盖默认的 Groovy 行为吗?
你可以通过两种方式完成。
如果要让transient成为一个字段,需要绑定。
class Address { String street String number static constraints = { number bindable: true, nullable:true } static transients = ['number'] }
您可以使用一些getter方法绑定它。
class Address { String street String number String getDifferentNumber() { number } static transients = ['differentNumber'] }
希望对您有所帮助。享受吧。
Is there any good reason for that?
是的。这是自 Grails 2.0.2 以来的行为。默认情况下不可绑定的属性是与瞬态字段、动态类型属性和静态属性相关的属性。在 https://spring.io/blog/2012/03/28/secure-data-binding-with-grails.
上有一些关于此的讨论Grails domain instantiation overrides the default Groovy behaviour?
是的。这允许做一些在网络应用程序中常见的事情,比如以一种允许将一堆字符串(请求参数)绑定到对象图所需的大量灵活性的方式将请求参数绑定到域实例.
如果你真的想绑定到瞬态 属性 你所要做的就是将 属性 配置为可绑定:
class Address {
String street
String number
static transients = ["number"]
static constraints = {
number bindable: true
}
}
参见 http://grails.github.io/grails-doc/2.4.5/ref/Constraints/bindable.html。
希望对您有所帮助。