gpt4 book ai didi

Grails 2.3.4 生成的脚手架验证

转载 作者:行者123 更新时间:2023-12-02 14:24:30 25 4
gpt4 key购买 nike

我试图了解 Grails 2.3.4 生成的脚手架方法如何执行验证。例如,这是为我的 Club 域保存方法生成的:

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] }
}
}

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

如文档所示,我没有看到对 clubInstance.validate() 的显式调用或对 clubInstance.save 的任何错误检查。然而,它似乎确实有效。那么如果存在约束冲突,该方法如何验证并返回 View 呢?

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

最佳答案

当您在 Controller 操作方法中包含参数时,Grails 将为它们进行数据绑定(bind)。对于字符串、数字、 bool 值等简单类型,参数名称与参数名称匹配,如果存在匹配和合理的方式将参数字符串转换为请求的类型,则为您完成。

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

关于Grails 2.3.4 生成的脚手架验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21004137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com