Grails中的电子邮件验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Grails中的电子邮件验证相关的知识,希望对你有一定的参考价值。

grails中是否有一种方法可以定义可以为空的电子邮件字段,但如果该值存在,那么它必须是电子邮件类型?

我试过了

String name
String email

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

但如果我没有为电子邮件提供任何值,只提供name的值,则不保存实例。

答案

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

另一答案

在阅读了您的问题后,我了解到您需要提供姓名和电子邮件,假设您的域类具有名称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

我在app开始时尝试这个,在这里你可以看到profile1和profile2中的email属性不是有效值,所以不会持久化,验证电子邮件值是否是原因,如果是,则写入一条消息

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> 
另一答案

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

以上是关于Grails中的电子邮件验证的主要内容,如果未能解决你的问题,请参考以下文章

Grails 覆盖默认的电子邮件验证

Grails:验证包含分隔的电子邮件地址列表的字符串

Grails springSecurityService如何设置当前用户

Grails 中的自定义验证器中的异常

外来字符的电子邮件验证

Grails / Spring Security - 注册电子邮件未解锁帐户