我试图了解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的最佳实践方法吗?
答案 0 :(得分:3)
当您在控制器操作方法中包含参数时,Grails将为它们执行数据绑定。对于简单类型,如字符串,数字,布尔值等,参数名称与参数名称匹配,如果有匹配和将参数字符串转换为请求类型的合理方法,则为您完成。
对于复杂类型,该参数被视为命令对象。如果它在控制器类中定义,则在编译时通过AST转换使其可验证。如果类在其他地方定义(例如src / groovy),则必须使用grails.validation.Validateable
注释进行注释,如果它是域类,那么它显然是可验证的。在任何情况下,在创建实例和数据绑定之后,都会为您调用validate()。