Grails 2.3.4生成了脚手架验证

时间:2014-01-08 18:53:02

标签: grails grails-controller grails-2.3

我试图了解Grails 2.3.4如何生成脚手架方法执行验证。例如,这是我的俱乐部域名保存方法生成的内容:

def save(Club clubInstance) {
    if (clubInstance == null) {
        notFound()
        return
    }

    if (clubInstance.hasErrors()) {
        respond clubInstance.errors, view:'create'
        return
    }

    clubInstance.save flush:true

    request.withFormat {
        form {
            flash.message = message(code: 'default.created.message', args: [message(code: 'clubInstance.label', default: 'Club'), clubInstance.id])
            redirect clubInstance
        }
        '*' { respond clubInstance, [status: CREATED] }
    }
}

根据我的理解,第一阶段的验证发生在数据绑定到保存操作的Club clubinstance参数上。因此,任何数据绑定错误都将被捕获到if(clubInstance.hasErrors())。

我没有看到对clubInstance.validate()的明确调用或对clubInstance.save的任何错误检查,如文档所示。它似乎确实有效。那么,如果存在约束违规,此方法如何验证并返回到视图?

更重要的是,我们不应该使用生成的脚手架控制器作为在Grails中进行基本CRUD的最佳实践方法吗?

1 个答案:

答案 0 :(得分:3)

当您在控制器操作方法中包含参数时,Grails将为它们执行数据绑定。对于简单类型,如字符串,数字,布尔值等,参数名称与参数名称匹配,如果有匹配和将参数字符串转换为请求类型的合理方法,则为您完成。

对于复杂类型,该参数被视为命令对象。如果它在控制器类中定义,则在编译时通过AST转换使其可验证。如果类在其他地方定义(例如src / groovy),则必须使用grails.validation.Validateable注释进行注释,如果它是域类,那么它显然是可验证的。在任何情况下,在创建实例和数据绑定之后,都会为您调用validate()。