2011-06-07 45 views
0

我试图验证SELECT。通常我会使用inList,因为SELECT意味着固定数量的字符串,但我想知道是否有更优雅的东西。在这种情况下,我有一个带有SELECT值的表单,其值为0-24,对应于接下来的24个月。Grails验证字符串为整数范围的最佳做法

在我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}) 
    } 
} 

我希望能够使用的范围:从0到24的语句,但是从我的理解范围,它们并不适用于生成的字符串由形式。

是否有一个首选的方法将输入的字符串强制转换为int,以便我可以使用范围:0..24?或者有另一种方法来处理这个问题?

我能做

inList: [ "0", "1", /* type them all out */, "24" ] 

或写一些更强大的自定义验证,但我不知道是否有一个更时髦/ Grails的解决方案。

谢谢。

+0

最终的解决方案是'code' – Tak 2011-06-09 05:47:11

回答

1
class FormCommand { 

    Integer startSlot 

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

你能解释一下,可能是参考文档吗? – 2012-08-09 17:31:26

2

可以使用的范围,象这样的字符串...

class FormCommand { 

    String startSlot 

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

这与我最终使用的最接近。我想发布最后的结果。 – Tak 2011-06-09 05:50:24

+0

很高兴它指出你在正确的方向:D – gotomanners 2011-06-09 15:26:47

0

最后的答案竟然涉及这里的建议组合:

class FormCommand { 

    Integer startSlot 

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

文档在(http://grails.org/doc/latest/ref/Constraints/range.html)的时候,它说它可以用在任何有下一个/上一个的东西上。我不知道你可以隐式地将param.startSlot转换为Integer,只需将该字段指定为Integer即可。

谢谢。

+1

这是如何“这里的建议的组合”?忽略空格,这与我的答案相同。 – 2012-08-13 12:50:23

+0

我忘了我为什么这么说。也许其他人删除了他们发表的评论和/或我发布的帖子。将答案重新分配给您。 – Tak 2012-09-25 22:17:05