(快速参考)

验证方式

4.0.2

验证方式

365bet地区365bet地区验证功能基于Spring的验证器API365bet地区和数据绑定功能然而,365bet地区进一步扩展了这一功能,并提供了一种统一的方法,以其约束机制定义验证约束

365bet地区365bet地区中的约束是一种以声明方式指定验证规则的方法,通常将其应用于域类然而网址映射命令对象也支持约束

声明约束

在域类中约束用分配了代码块的constraints属性定义

 用户 {
    登录密码电子邮件整数静态的约束

 用户静态约束登录尺寸: 5..15, 空白: , 独特: 密码尺寸: 5..15, 空白: 电子邮件电子邮件: , 空白: : 18
    }
}

在此示例中,我们声明了登录密码, 电子邮件属性

默认情况下,所有域类属性均不可为空,即它们具有隐式可为空的false约束

请注意,约束仅评估一次,这可能与依赖于诸如java有用的日期.

 用户静态约束不评估约束时创建此Date对象
        每次验证User类的实例时生日最大值:  日期()
    }
}

尝试从静态约束块中引用实例变量非常容易,但这在Groovy或Java中是不合法的。如果这样做,您将获得一个MissingPropertyException

 响应静态的约束调查空白: 空白: , inList调查答案

看看如何inList约束引用实例属性调查那行不通,而是使用自定义验证器:

 响应静态约束调查空白: 空白: , 验证器val obj valobj调查答案

在这个例子中对象自定义验证器的参数是域实例已经过验证,因此我们可以访问其调查属性并返回一个布尔值,以指示是否属性小时已验证

验证约束

验证基础

致电验证验证域类实例的方法

定义用户用户参数如果用户验证与用户做某事
}
其他用户错误allError每个println
    }
}

错误域类上的property是Spring的一个实例失误接口失误界面提供了导航验证错误以及检索原始值的方法

验证阶段

365bet地区在365bet地区中,验证分为两个阶段,第一个阶段是数据绑定当您将请求参数绑定到实例时,例如

定义用户用户参数

此时,您可能已经在错误属性的类型转换,例如将字符串转换为日期,您可以使用以下命令检查并获取原始输入值失误API

如果用户hasErrors如果用户错误hasFieldErrors"登录"println用户错误getFieldError"登录"被拒绝的值

验证的第二阶段发生在您致电时验证要么365bet地区这是365bet地区将针对约束您定义的例如默认方法调用验证执行之前,允许您编写如下代码

如果用户保存返回用户其他用户错误allError每个println
    }
}

在类之间共享约束

365bet地区365bet地区中常见的模式是使用命令对象365bet地区用于验证用户提交的数据,然后将命令对象的属性复制到相关域类中这通常意味着您的命令对象和域类共享属性及其约束,您可以手动在这两个约束之间复制并粘贴约束,但是这是非常错误的倾向于使用365bet地区全局约束和导入机制

全球约束

除了在域类中定义约束之外,命令对象和其他可验证的类您也可以在中定义它们grails应用程序配置运行时groovy:

grails gorm默认约束'*'(可为空: , 尺寸: 1..20myShared可为空: , 空白: )
}

这些约束没有附加到任何特定的类,但是可以从任何可验证的类中轻松引用它们

 用户静态约束登录共享: "myShared"
    }
}

注意使用共享参数的值是在其中定义的约束之一的名称grails gorm默认约束尽管有配置设置的名称,您仍可以从任何可验证的类(例如命令对象)中引用这些共享约束。

约束是一种特殊情况,这意味着在上例中,相关联的约束可以为null和大小将应用于所有可验证类中的所有属性。这些默认值可以由可验证类中声明的约束覆盖

导入约束

365bet地区365bet地区引入了共享约束的另一种方法,该方法允许您将一组约束从一个类导入另一个类

假设您有一个像这样的领域类

 用户 {
    名字密码哈希静态的约束firstName空白: , 可为空: 空白: , 可为空: 密码哈希空白: , 可为空: 
    }
}

然后,您想创建一个命令对象用户指令共享域类的某些属性和相应的约束,您可以使用进口于方法

 用户指令 {
    名字密码确认密码静态的约束importFrom用户密码空白: , 可为空: 确认密码空白: , 可为空: 
    }
}

这将从所有导入约束用户域类并将其应用于用户指令导入将忽略源类中的任何约束用户在导入类中没有相应属性的用户指令在上面的示例中,仅将firstName和lastName约束导入到用户指令因为这些是两个类共享的唯一属性

如果您想进一步控制导入哪些约束,请使用包括排除参数这两个参数都接受与源约束中的属性名称匹配的简单或正则表达式字符串的列表,因此,例如,如果仅想导入lastName约束,则可以使用

静态约束importFrom User包括: [""]
    ...
}

或者如果您想要所有以Name结尾的约束

静态约束importFrom User包括: [/name/]
    ...
}

当然排除反向指定哪些约束应该被进口

客户端验证

显示错误

365bet地区通常,如果收到验证错误,则将其重定向回视图以进行渲染。一旦需要一种显示错误的方法,365bet地区支持一组丰富的标签来处理错误。renderErrors:

<> 豆角,扁豆="用户" />

如果您需要更多控制权,可以使用hasErrors每个错误:

<> 豆角,扁豆="用户">
  
    <> ="" 豆角,扁豆="用户">
  • 突出显示错误

    当错误输入字段时,使用红色框或某些指示符突出显示通常很有用。hasErrors通过调用它作为一种方法例如

    <> ='值hasErrors bean用户字段'登录','错误')}'>
       <> 类型="文本" ="登录" ="fieldValue bean用户字段登录"/>
    

    此代码检查登录的领域用户Bean有任何错误,如果有,它将添加一个错误CSS类div允许您使用CSS规则突出显示div.

    检索输入值

    每个错误实际上都是FieldErrorSpring中的类,该类中保留了原始输入值。这很有用,因为您可以使用error对象来恢复用户输入的值(使用fieldValue标签

    <> 类型="文本" ="登录" ="fieldValue bean用户字段登录"/>

    此代码将检查现有的FieldError在里面用户bean,如果有的话,获取原始输入值登录领域

    验证和国际化

    365bet地区关于365bet地区中的错误,需要注意的另一件事是错误消息不会在任何地方进行硬编码。FieldError365bet地区Spring中的类使用365bet地区解析消息包中的消息支持

    约束和消息代码

    代码本身是由约定决定的。例如,考虑一下我们前面提到的约束

    与mycompany myapp 用户静态约束登录尺寸: 5..15, 空白: , 独特: 密码尺寸: 5..15, 空白: 电子邮件电子邮件: , 空白: : 18
        }
    }

    365bet地区如果违反了约束,365bet地区会按照惯例查找消息代码

    约束 错误代码

    空白

    className propertyName空白

    信用卡

    className propertyName creditCard无效

    电子邮件

    className propertyName电子邮件无效

    inList

    className propertyName不是inList

    火柴

    className propertyName匹配无效

    最大值

    超出className propertyName的最大值

    maxSize

    超出className propertyName maxSize

    className propertyName min notmet

    最小尺寸

    className propertyName minSize notmet

    不相等

    className propertyName notEqual

    可为空

    className propertyName可为空

    范围

    className属性名称范围太小要么className属性名称范围太大

    尺寸

    className属性名称大小太小要么className属性名称大小太大

    独特

    className propertyName唯一

    网址

    className propertyName网址无效

    验证器

    类名propertyName闭包返回的字符串

    在这种情况下空白约束这将是用户登录空白因此您需要在您的信息中输入以下信息365bet地区应用程序在消息属性中文件

    用户登录空白必须指定您的登录名

    查找带有或不带有包的类名,其中包版本优先com mycompany myapp用户登录为空将在之前使用用户登录空白这允许您的域类消息代码与插件冲突

    有关哪些约束适用于哪些代码的参考,请参阅每个约束的参考指南e g空白).

    显示讯息

    renderErrors标签将使用来自动为您查找邮件信息标签如果您需要更多的渲染控制,则可以自己处理

    <> 豆角,扁豆="用户">
      
      <> ="" 豆角,扁豆="用户">
    • <> 错误="" />

      在这个例子中每个错误标签,我们使用信息标签与其错误参数以读取给定错误的消息

      将验证应用于其他课程

      域类命令对象默认情况下支持验证,可以通过定义static使其他类可验证约束属性,如上所述,然后将其告知框架。重要的是,应用程序向框架注册可验证的类,只需定义约束财产不足

      可验证的特征

      定义静态的类约束财产并实施有效期特质将是可验证的考虑此示例

      src main groovy com mycompany myapp用户groovy
      与mycompany myapp grails验证有效
      
       用户 实施可验证的静态约束登录尺寸: 5..15, 空白: , 独特: 密码尺寸: 5..15, 空白: 电子邮件电子邮件: , 空白: : 18
          }
      }
      程序访问

      访问可验证对象上的约束稍有不同您可以通过访问以下对象在另一个上下文中以编程方式访问命令对象的约束。ConstraintsMap类的静态属性该属性是的实例约束财产>

      在上面的示例中,访问用户限制地图登录空白会屈服用户限制地图登录唯一会屈服.