我刚开始研究 grails,我以前主要使用 PHP,所以我的问题是向表单添加自定义验证场景的最佳方式是什么。因此,假设我们在域中拥有所有约束,但是在某个控制器操作下,表单绑定到域,我们想要添加某种额外的自定义验证(为了参数,假设我们有一个日期,并且仅在这种情况应该在未来 2 周以上)。这样做的最佳方法是什么?
谢谢!
我刚开始研究 grails,我以前主要使用 PHP,所以我的问题是向表单添加自定义验证场景的最佳方式是什么。因此,假设我们在域中拥有所有约束,但是在某个控制器操作下,表单绑定到域,我们想要添加某种额外的自定义验证(为了参数,假设我们有一个日期,并且仅在这种情况应该在未来 2 周以上)。这样做的最佳方法是什么?
谢谢!
根据您的要求,您可以使用带有约束的命令对象:
@grails.validation.Validateable
class CommandObject {
Date date
static constraints = {
date(/*constraint here*/)
}
}
编辑:
关于第二个问题,是的,您可以使用 将域对象的约束共享到命令对象importFrom [EntityName]
,请参见文档中的示例:
域对象:
class User {
String firstName
String lastName
String passwordHash
static constraints = {
firstName blank: false, nullable: false
lastName blank: false, nullable: false
passwordHash blank: false, nullable: false
}
}
命令对象:
class UserCommand {
String firstName
String lastName
String password
String confirmPassword
static constraints = {
importFrom User
password blank: false, nullable: false
confirmPassword blank: false, nullable: false
}
}
我建议您在表单到达控制器之前使用 jquery 进行表单验证。如果需要,您还可以对 gsp 本身进行单独验证(例如,检查输入字段是否是必需的、仅接受电子邮件、仅接受整数等)。您甚至可以在控制器上执行此操作。但我认为使用 jquery 进行表单验证已经足够了 :)