如何确保在Grails中设置布尔字段?

时间:2010-11-18 16:32:12

标签: validation grails boolean nullable grails-domain-class

我想确保检查表示布尔值的两个表单字段之一。但是没有适当的限制来做到这一点。 nullable: false不起作用。

class Organisation {

    Boolean selfInspecting

    static constraints = {
        selfInspecting(nullable: false)
    }

}

如何检查是否选中了其中一​​个字段?

3 个答案:

答案 0 :(得分:3)

也许最简单的方法是使用确保选择值的表单。因此,创建单选按钮而不是复选框是更好的解决方案。它也会直接代表你的意图。

答案 1 :(得分:2)

您也可以在控制器中进行检查,例如

if (params.checkBox1 != 'on' && params.checkBox2 != 'on')
  flash.error = 'At least one value must be checked.'
  return ...

答案 2 :(得分:1)

您可以编写自己的自定义验证器。

类似

selfInspecting(validator: {val, obj -> /*test selfInspecting here*/})

编辑 - 响应其他答案 - 您可以在表单上处理此问题,但您也应该在服务器上处理它。

另一个编辑 - 评论中建议您可能要验证Domain类中的两个字段之一。使用自定义验证器也可轻松完成此操作。使用上面的自定义验证器闭包签名,val是值selfInspecting,obj是域对象实例。你可以拥有

{ val, obj ->

    if (val == null) return false // if you want to ensure selfInspecting is not null
    else return true

    ... or ...

    // if you want to check that at least 1 of two fields is not null
    def oneOrTheOther = false
    if (obj.field1 != null || obj.field2 != null) 
       oneOrTheOther = true
    return oneOrTheOther

}