我有一个返回错误的验证器。甚至通过flash消息显示错误。但实例仍然存在。在域类我有......
static transients=['hasCustomErrors']
Boolean hasCustomErrors=false
static constraints={
id validator:{val,obj->
if(obj.hasCustomErrors){
return 'errors.action.denied';
}
}
}
在控制器中我有一个测试
instance.message="This should not persist"
instance.hasCustomErrors=true;
if(!instance.hasErrors() && instance.save(flush:true)){
//success message
flash.messages.shift_tab=["Shift Was Successfully Flagged As Rejected"];
}
else{
//error message
flash.errors.shift_tab=[];
instance.errors.allErrors.each{
flash.errors.shift_tab.push(g.message([error: it]));
}
}
redirect(action:'edit', id:params.id)
return;
该视图显示错误消息,但实例仍然保留,因此消息列在数据库中显示“This should not persist is”。
答案 0 :(得分:0)
你可能必须在检查它有错误之前运行instance.validate()
,我可以看到你正在尝试做什么,你可以在不引入变量来捕获错误的情况下进行,而不是让实例拒绝
instance.errors.reject('fieldName','Issue with field')
这将迫使该字段失败