【问题标题】:Use size constraint with Integer in Grails在 Grails 中使用 Integer 的大小约束
【发布时间】:2009-08-20 15:44:34
【问题描述】:

参考文档说尺寸限制:

使用 Groovy 范围来限制集合或数字的大小或 字符串的长度。

当我对整数设置大小限制时,我会收到警告

域类 TheClass 的属性 [prop] 具有类型 [java.lang.Integer] 并且不支持约束 [size]。这 验证期间不会检查约束。

文档错了吗?

我知道我可以使用范围,但通常能够更容易地指定数字中的位数而不是实际值(例如社会保险号必须有 7 位或其他任何数字,而不是范围为 1000000 - 9999999)。

【问题讨论】:

    标签: validation grails constraints grails-orm


    【解决方案1】:

    如果你想要位数,请确保它是正数并且有一定的长度:

    myInteger( validator: {
       return it > 0 &&  (it.toString.length) == 7
    })
    

    【讨论】:

    • return 有必要吗?
    【解决方案2】:

    我在搜索 JIRA 时找到了答案:http://jira.codehaus.org/browse/GRAILS-947。文档是错误的。

    我们不需要数字字段的 minSize、maxSize 和大小限制 不再,因为此功能受最小、最大和范围约束 各自。所以我们标记这些约束(仅适用于数字字段) 在 0.5 中已弃用,并将在 0.6 中将其删除。

    看起来这取决于自定义验证器。

    【讨论】:

    • "remove it in 0.6" 截至 2.1.1,它仍然存在。
    【解决方案3】:

    你也可以使用 max 来约束一个整数,比如 myIntProp(max:9999999)

    【讨论】:

    • 这就像使用范围一样。通常,能够指定数字中的位数而不是实际值会更容易(例如社会保险号必须有 7 位或其他任何数字,而不是在 1000000 - 9999999 的范围内)。跨度>
    • 如果可能的话会更容易,但我看不出自定义验证器比范围或最大值更容易。另一件要考虑的事情是,如果您正在使用“数字”,例如 SSN 或美国邮政编码,可能包含前导零,那么最好还是使用字符串。只是一个想法。 -- 戴夫
    • 好吧,当你连续输入 7 个 0 时会有出错的余地,仅此而已。尽管如此,我可能会满足于此,而不是我认为的自定义验证器。字符串点是有效的......但我认为使用数字更容易,只需格式化它以显示一定数量的数字(即包括前导零)。
    【解决方案4】:

    正如您在 Jira 链接中指出的那样,我认为正确的答案是对整数使用 range 约束。

    我认为这很简单,只需将 size 替换为 range

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2021-06-08
      相关资源
      最近更新 更多