Grails中的电子邮件验证

时间:2018-09-06 05:01:37

标签: validation grails

是否有办法定义可为空的电子邮件字段,但是如果存在该值,则该字段必须为电子邮件类型?

我尝试过

String name
String email

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

但是,如果我没有为电子邮件提供任何值,而仅为名称提供值,则不会保存实例。

3 个答案:

答案 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,这会在nullableblank属性之间造成冲突。然后,如果为null,则可以不使用电子邮件保存数据,否则将验证电子邮件类型。