我见过的很多 Grails Controller 示例都向您展示了如何将验证代码添加到在 View 中传递和从 View 传递的命令类,如下所示:
class RegisterCommand {
String username
String email
static constraints = {
username blank: false, nullable: false, validator: { value ->
!User.findByUsername(value) }
email blank: false, nullable: false, email: true
}
}
这很棒,但如果我们需要在另一个 Controller 中验证用户,可能会导致代码重复。因此,Grails 为您提供了从域类导入验证规则的选项,如下所示 -
static constraints = {
importFrom User
}
所以在这里,我的验证规则是从我的 User
类中提取的。
这确实有助于 DYR 原则,但如果我想有条件从域类导入验证规则怎么办?例如,如果有人选中了表单上的复选框,表示他们希望通过邮寄方式接收小册子,我只想验证表单上的地址字段。我已经尝试过这个主题的几种变体,但我似乎无法让它发挥作用......这可能吗?
static constraints = {
importFrom User
addressCheckbox validator: { value, command ->
if (value) {
importFrom Address
}
}
}
最佳答案
我认为它不起作用,因为 importFrom
在编译时适用于约束构建器层,但您的验证器闭包在运行时的验证阶段调用 importFrom
。
关于validation - 将 Grails 验证代码保存在域对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506447/