是否有办法定义可为空的电子邮件字段,但是如果存在该值,则该字段必须为电子邮件类型?
我尝试过
String name
String email
static constraints = {
email nullable: true, blank: false, email: true
}
但是,如果我没有为电子邮件提供任何值,而仅为名称提供值,则不会保存实例。
答案 0 :(得分:1)
检查电子邮件参数。也许它不是null而是一个空字符串。在这种情况下,它将由于“空白:假”约束而失败。
答案 1 :(得分:1)
在阅读完您的问题后,我了解到您需要提供名称和电子邮件,并假设您的域类的名称为Profile,那么您可以尝试以下操作:
class Profile {
String name
String email
static constraints = {
name blank: false
email nullable: false, blank: false, email: true
}
}
然后,您可以检查save方法是否返回null,这表明存在验证错误,因此该实例未持久保存。您可以在这里http://docs.grails.org/snapshot/ref/Domain%20Classes/save.html
了解更多我在启动应用程序时尝试此操作,在这里您可以看到profile1和profile2中的email属性不是有效值,因此不存在,请验证是否是电子邮件值的原因,如果是,则写一条消息< / p>
package demo
class BootStrap {
def init = { servletContext ->
Profile profile1 = new Profile(name: 'john', email: '')
Profile profile2 = new Profile(name: 'peter', email: 'asdasd')
Profile profile3 = new Profile(name: 'ana', email: 'ana@example.com')
List<Profile> profiles = [profile1, profile2, profile3]
profiles.each { Profile profile ->
if (!profile.save()) {
if (profile.errors.hasFieldErrors('email')) {
println profile.errors.getFieldError('email').rejectedValue + ' is an invalid values'
}
}
}
}
def destroy = {
}
}
这里的输出是
grails> rA
| Running application...
null is an invalid values
asdasd is an invalid values
Grails application running at http://localhost:8080 in environment: development
grails>
答案 2 :(得分:0)
仅删除blank: false
,这会在nullable
和blank
属性之间造成冲突。然后,如果为null,则可以不使用电子邮件保存数据,否则将验证电子邮件类型。