Validation Grails中的电子邮件验证

Validation Grails中的电子邮件验证,validation,grails,Validation,Grails,grails中是否有方法定义一个可以为null的email字段,但是如果该值存在,那么它必须是email类型 我试过了 String name String email static constraints = { email nullable: true, blank: false, email: true } 但是,如果我没有为email提供任何值,而只为name提供值,则不会保存实例。检查email参数。可能它不是null,而是一个空白字符串。在这种情况下,由于“blank:f

grails中是否有方法定义一个可以为null的email字段,但是如果该值存在,那么它必须是email类型

我试过了

String name
String email

static constraints = {
    email nullable: true, blank: false, email: true
}

但是,如果我没有为email提供任何值,而只为name提供值,则不会保存实例。

检查email参数。可能它不是null,而是一个空白字符串。在这种情况下,由于“blank:false”约束,它将失败

检查电子邮件参数。可能它不是null,而是一个空白字符串。在这种情况下,由于“blank:false”约束,它将失败

阅读您的问题后,我理解您要求提供名称和电子邮件,假设您的域类具有名称配置文件,您可以尝试以下操作:

class Profile {
    String name
    String email

    static constraints = {
        name blank: false
        email nullable: false, blank: false, email: true
    }
}
然后,您可以检查save方法是否返回null,这表明存在验证错误,因此实例没有被持久化。你可以在这里读到

我在应用程序启动时尝试此操作,在这里您可以看到profile1和profile2中的电子邮件属性不是有效值,因此不会持久化,它会验证电子邮件值是否是原因,如果是,则会写入消息

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 = {
    }
}

阅读您的问题后,我理解您要求提供名称和电子邮件,假设您的域类具有名称配置文件,您可以尝试以下操作:

class Profile {
    String name
    String email

    static constraints = {
        name blank: false
        email nullable: false, blank: false, email: true
    }
}
然后,您可以检查save方法是否返回null,这表明存在验证错误,因此实例没有被持久化。你可以在这里读到

我在应用程序启动时尝试此操作,在这里您可以看到profile1和profile2中的电子邮件属性不是有效值,因此不会持久化,它会验证电子邮件值是否是原因,如果是,则会写入消息

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 = {
    }
}

只需删除
blank:false
这会在
nullable
blank
属性之间产生冲突。如果为空,则可以不使用电子邮件保存数据,否则将验证电子邮件类型

只需删除
blank:false
这会在
nullable
blank
属性之间产生冲突。如果为空,则可以不使用电子邮件保存数据,否则将验证电子邮件类型

好的,那么我如何定义这样一种情况,其中可以有null,但如果有值,它必须是电子邮件?好的,那么我如何定义这样一种情况,其中可以有null,但如果有值,它必须是电子邮件?