嗨,现在谢谢
在Domain类中,我想基于使用beforeInsert事件的条件更改布尔属性,但布尔属性不受影响。这是域类:
class Pet {
String name
String type
Boolean status = true
static constraints = {
name blank:false
type inList:["Dog", "Cat"]
}
def beforeInsert() {
status = (type == "Dog") ? true : false
}
String toString() { name }
}
我尝试在bootstrap.groovy中创建一些测试数据
class BootStrap {
def init = { servletContext ->
def nami = new Pet(name:"nami", type:"Dog")
if (!nami.save()) {
nami.errors.allErrors.each { error ->
log.error "[$error.field: $error.defaultMessage]"
}
}
def hotch = new Pet(name:"hotch", type:"Cat")
if (!hotch.save()) {
hotch.errors.allErrors.each { error ->
log.error "[$error.field: $error.defaultMessage]"
}
}
}
}
在grails run-app之后我在控制台中收到以下错误消息,我收到的消息是属性状态不能为null
| Error 2014-10-07 13:27:28,281 [localhost-startStop-1] ERROR conf.BootStrap - [status: Property [{0}] of class [{1}] cannot be null]
| Error 2014-10-07 13:27:28,314 [localhost-startStop-1] ERROR conf.BootStrap - [status: Property [{0}] of class [{1}] cannot be null]
我尝试过没有布尔属性,并且beforeInsert运行良好,我甚至创建了另一个项目,以便复制场景和相同的行为。
我缺少的是,我使用的是grails 2.3.8
由于
答案 0 :(得分:0)
根据定义,beforeInsert
将在最后返回false时取消操作。
beforeInsert - Executed before an object is initially persisted to the database.
If you return false, the insert will be cancelled.
由于您的beforeInsert
方法只有一行,并且将状态设置为true或false,因此groovy将返回该布尔值。如果这恰好是假的,它将取消您的保存。您可能希望返回true或false之外的其他内容以避免取消。
def beforeInsert() {
status = (type == "Dog")
true
}