Grails将字符串验证为整数范围的最佳实践

Grails将字符串验证为整数范围的最佳实践,grails,validation,range,Grails,Validation,Range,我正在尝试验证一个SELECT。通常我会使用一个inList,因为SELECT意味着一个固定数量的字符串,但我想知道是否有更优雅的东西。在本例中,我有一个带有SELECT输入的表单,其值为0-24 as,对应于接下来的24个月 在我的cmdObject中,我有 class FormCommand { String startSlot static constraints = { // startSlot(nullable:false, blank:false, range

我正在尝试验证一个SELECT。通常我会使用一个inList,因为SELECT意味着一个固定数量的字符串,但我想知道是否有更优雅的东西。在本例中,我有一个带有SELECT输入的表单,其值为0-24 as,对应于接下来的24个月

在我的cmdObject中,我有

class FormCommand {

  String startSlot

  static constraints = {
      // startSlot(nullable:false, blank:false, range:0..24)
      startSlot(nullable:false, blank:false, 
                validator: { val, obj -> val.toInteger() < 25})
  }
}
或者编写一些更健壮的自定义验证器,但我想知道是否有一个更groovy/grails的解决方案


谢谢。

您可以使用带字符串的范围,例如

class FormCommand {

  Integer startSlot

  static constraints = {
      startSlot(nullable: false, size: 0..24)
  }
}
class FormCommand {

  String startSlot

  static constraints = {
      startSlot(nullable: false, size: '0'..'24')
  }
}

您可以将范围与字符串一起使用,例如

class FormCommand {

  String startSlot

  static constraints = {
      startSlot(nullable: false, size: '0'..'24')
  }
}

我会用射程。见文件


我认为大小是指字符串,更像是长度,我会使用范围。见文件


我认为大小是指字符串,更像是一个长度问题。最终的答案包括以下建议:

class FormCommand {

  Integer startSlot

  static constraints = {
     startSlot(nullable: false, range: 0 .. 24)
  }
}
当()上的文档说它可以用在任何具有下一个/上一个属性的东西上时,我很反感。我不知道只需将字段指定为整数,就可以将param.startSlot隐式转换为整数


谢谢

最终的答案包括以下建议:

class FormCommand {

  Integer startSlot

  static constraints = {
     startSlot(nullable: false, range: 0 .. 24)
  }
}
当()上的文档说它可以用在任何具有下一个/上一个属性的东西上时,我很反感。我不知道只需将字段指定为整数,就可以将param.startSlot隐式转换为整数


谢谢

最终解决方案是
code
最终解决方案是
code
同意的,大小不是正确的方法,但范围是正确的同意,大小不是正确的方法,但范围是正确的。这与我最终使用的最接近。我想发布最终结果。这与我最终使用的最接近。我想发布最终结果。你能解释一下吗,也许是参考文档?你能解释一下吗,也许是参考文档?这是“这里的建议组合”吗?忽略空格,这和我的答案是一样的。我忘了我为什么这么说了。也许其他人删除了我的评论和/或帖子。将答案重新分配给您。这是“这里的建议组合”吗?忽略空格,这和我的答案是一样的。我忘了我为什么这么说了。也许其他人删除了我的评论和/或帖子。把答案重新分配给你。