在域类上使用地图自动创建不会填充瞬态属性:
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行为吗?
答案 0 :(得分:2)
你可以双向完成。
如果你想使一个字段成为瞬态,你需要绑定它。
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']
}
希望它会对你有所帮助。享受。
答案 1 :(得分:1)
有什么好的理由吗?
是。这是自Grails 2.0.2以来的行为。默认情况下不可绑定的属性是与瞬态字段,动态类型属性和静态属性相关的属性。在https://spring.io/blog/2012/03/28/secure-data-binding-with-grails进行了一些讨论。
Grails域实例化会覆盖默认的Groovy行为吗?
是。这允许在Web应用程序中执行许多常见操作,例如将请求参数绑定到域实例,从而允许将一堆字符串(请求参数)绑定到对象图形所需的大量灵活性。
如果你真的想要绑定到一个瞬态属性,你所要做的就是将属性配置为可绑定:
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。
我希望有所帮助。