Grails 2.3.4产生的脚手架验证
-
20-12-2019 - |
题
我试图了解Grails 2.3.4生成的脚手架方法如何执行验证。例如,这是我的Club Domain Save方法生成的内容:
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 ClubStance参数。因此,如果(clubinstance.hasErrors())将捕获任何数据绑定错误。
我没有明确调用clubinstance.validate()或在ClubInstance上检查任何错误检查。作为文档建议。它似乎确实有效。那么如果存在限制违规,此方法如何验证并返回视图?
更重要的是,我们不应该使用生成的脚手架控制器作为在Grails中进行基本Crud的最佳实践方式?
解决方案
当您在Controller操作方法中包含参数时,Grails将为它们进行数据绑定。对于简单类型,如字符串,数字,布尔值等。参数名称与参数名称匹配,如果有一个匹配和将参数字符串转换为请求类型的匹配方式,则为您完成。
对于复杂类型,参数被视为命令对象。如果它在控制器类中定义,则它在通过AST转换的编译时进行了验证。如果类是在别处定义的(例如src / groovy),它必须用grails.validation.Validateable
注释注释,如果它是域类,那么它显然是明显的validatable。在任何情况下,在创建实例和数据绑定后,为您调用validate()。
不隶属于 StackOverflow