grails自定义验证器不停止保存

时间:2017-01-09 01:34:21

标签: hibernate grails gorm

我有一个返回错误的验证器。甚至通过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”。

1 个答案:

答案 0 :(得分:0)

你可能必须在检查它有错误之前运行instance.validate(),我可以看到你正在尝试做什么,你可以在不引入变量来捕获错误的情况下进行,而不是让实例拒绝

instance.errors.reject('fieldName','Issue with field')

这将迫使该字段失败