Validation grailsvalidate()覆盖拒绝

Validation grailsvalidate()覆盖拒绝,validation,grails,Validation,Grails,,但对域类调用validate()会覆盖在以下情况之前放入的所有拒绝: def save = { def assignment = new Assignment(params) assignment.errors.reject("assignment.error") // Save if (assignment.validate()) { //rejected error is gone assignment.save()

,但对域类调用validate()会覆盖在以下情况之前放入的所有拒绝:

def save = {
    def assignment = new Assignment(params)

    assignment.errors.reject("assignment.error")

    // Save
    if (assignment.validate()) {
        //rejected error is gone
        assignment.save()
        redirect action: "list"
    }
    else {
        //render errors
        render view: "create", model: [instance: assignment]
    }
}

因此,在这个问题得到解决之前(从grails 1.0开始就存在,现在几乎是2.0),是否有任何聪明的解决方法来保留拒绝并立即使用if validate()然后save()范式?

这不是一个bug,而是设计的。通过调用
validate()
您要求验证过程重新开始。如果您希望手动
reject()
调用包含在错误中,请将它们放在调用
validate()

@Burt是正确的,很遗憾。这是设计的,虽然设计很粗略。 问题是grails在某些情况下会在后台自行验证,在不应该擦除自定义错误的地方擦除这些错误

因此,您不仅必须避免调用validate(),还必须避免平台在各个点上默默地擦除错误

有时,您可以使用Domain.read(params.id)而不是Domain.get(params.id)来解决这个问题


在我看来,手动添加错误和grails自动行为之间的关系不是直观的

问题是validate()将拒绝在控制器执行过程中某个时候通过服务在其上运行代码的字段,因此如果该代码返回错误的内容,则需要拒绝。如果我事先调用validate(),即使代码成功,这些错误仍然会存在。